From 3824bddbb53934116fdfe7f8ee2df78d8546339e Mon Sep 17 00:00:00 2001 From: zeshan Date: Thu, 5 Mar 2026 21:35:59 +0000 Subject: [PATCH] d --- .gitignore | 33 + .gitlab-ci.yml | 299 ++++++++ ansible/ansible.cfg | 3 + ansible/inventory.ini | 12 + ansible/mount.sh | 4 + ansible/ssh.yml | 108 +++ ansible/update.yml | 65 ++ ansible/vault.yml | 50 ++ client.ovpn | 78 +++ cloudflare/Dockerfile | 18 + cloudflare/checkip.sh | 75 ++ cloudflare/cloudflare-ddns.sh | 51 ++ cloudflare/docker-compose.yml | 9 + cloudflare/terraform.sh | 27 + .../zones/azuredevops/backend.tf | 0 cloudflare/zones/azuredevops/main.tf | 41 ++ .../zones/azuredevops/terraform.tfstate | 258 +++++++ cloudflare/zones/azuredevops/variables.tf | 15 + cloudflare/zones/dreamartdecor/backend.tf | 6 + cloudflare/zones/dreamartdecor/main.tf | 78 +++ cloudflare/zones/dreamartdecor/variables.tf | 15 + cloudflare/zones/ztariq/backend.tf | 0 cloudflare/zones/ztariq/main.tf | 83 +++ cloudflare/zones/ztariq/terraform.tfstate | 648 ++++++++++++++++++ cloudflare/zones/ztariq/variables.tf | 15 + cv archive/index2.html | 497 ++++++++++++++ cv archive/index3.html | 331 +++++++++ cv archive/index4.html | 281 ++++++++ cv archive/index5.html | 491 +++++++++++++ cv/Dockerfile | 2 + cv/compose.yml | 10 + cv/index.html | 564 +++++++++++++++ cv/zt1125.docx | Bin 0 -> 33872 bytes hurricane-main.zip | Bin 139715 -> 0 bytes hurricane/.env | 68 ++ hurricane/Makefile | 38 + hurricane/ac_runner_mac.sh | 61 ++ hurricane/act-runner.sh | 84 +++ hurricane/actrunner-host.sh | 85 +++ hurricane/autowinlogon.ps1 | 18 + hurricane/duckdns.yml | 8 + hurricane/fail2ban.sh | 34 + hurricane/gitlab-arm.sh | 30 + hurricane/hostbrr-mount.sh | 6 + hurricane/hostname-change.sh | 35 + hurricane/jellyfin.yml | 18 + hurricane/minio.yml | 21 + hurricane/mount.sh | 69 ++ hurricane/mount_smb.sh | 89 +++ hurricane/nc-backup.sh | 29 + hurricane/nc-restore.sh | 46 ++ hurricane/pi-hole.yml | 29 + hurricane/pivpn-fedora-nas-setup.md | 185 +++++ hurricane/qbt.sh | 22 + hurricane/qbt.yml | 39 ++ hurricane/restic-backup.sh | 26 + hurricane/restic.sh | 31 + hurricane/sbox.sh | 54 ++ hurricane/setup-samba.sh | 129 ++++ hurricane/sshfs_mount.sh | 1 + hurricane/wg-easy-hostbrr.yml | 31 + jellyfin/jellyfin.yml | 19 + netcup/Dockerfile | 363 ++++++++++ netcup/compose.yml | 124 ++++ netcup/usage.sh | 24 + sbox.sh | 54 ++ terraform/backend.tf | 31 + terraform/main.tf | 298 ++++++++ zeshancv/.dockerignore | 5 + zeshancv/Dockerfile | 23 + zeshancv/docker-compose.yml | 13 + zeshancv/index.html | 564 +++++++++++++++ zeshancv/zt1125.docx | Bin 0 -> 33872 bytes 73 files changed, 6971 insertions(+) create mode 100755 .gitignore create mode 100644 .gitlab-ci.yml create mode 100755 ansible/ansible.cfg create mode 100755 ansible/inventory.ini create mode 100755 ansible/mount.sh create mode 100755 ansible/ssh.yml create mode 100755 ansible/update.yml create mode 100755 ansible/vault.yml create mode 100644 client.ovpn create mode 100644 cloudflare/Dockerfile create mode 100755 cloudflare/checkip.sh create mode 100644 cloudflare/cloudflare-ddns.sh create mode 100644 cloudflare/docker-compose.yml create mode 100755 cloudflare/terraform.sh rename asd => cloudflare/zones/azuredevops/backend.tf (100%) mode change 100644 => 100755 create mode 100755 cloudflare/zones/azuredevops/main.tf create mode 100644 cloudflare/zones/azuredevops/terraform.tfstate create mode 100755 cloudflare/zones/azuredevops/variables.tf create mode 100755 cloudflare/zones/dreamartdecor/backend.tf create mode 100755 cloudflare/zones/dreamartdecor/main.tf create mode 100755 cloudflare/zones/dreamartdecor/variables.tf create mode 100755 cloudflare/zones/ztariq/backend.tf create mode 100755 cloudflare/zones/ztariq/main.tf create mode 100644 cloudflare/zones/ztariq/terraform.tfstate create mode 100755 cloudflare/zones/ztariq/variables.tf create mode 100644 cv archive/index2.html create mode 100644 cv archive/index3.html create mode 100644 cv archive/index4.html create mode 100644 cv archive/index5.html create mode 100644 cv/Dockerfile create mode 100644 cv/compose.yml create mode 100644 cv/index.html create mode 100644 cv/zt1125.docx delete mode 100644 hurricane-main.zip create mode 100755 hurricane/.env create mode 100755 hurricane/Makefile create mode 100755 hurricane/ac_runner_mac.sh create mode 100755 hurricane/act-runner.sh create mode 100755 hurricane/actrunner-host.sh create mode 100755 hurricane/autowinlogon.ps1 create mode 100755 hurricane/duckdns.yml create mode 100755 hurricane/fail2ban.sh create mode 100755 hurricane/gitlab-arm.sh create mode 100755 hurricane/hostbrr-mount.sh create mode 100755 hurricane/hostname-change.sh create mode 100755 hurricane/jellyfin.yml create mode 100755 hurricane/minio.yml create mode 100755 hurricane/mount.sh create mode 100755 hurricane/mount_smb.sh create mode 100755 hurricane/nc-backup.sh create mode 100755 hurricane/nc-restore.sh create mode 100755 hurricane/pi-hole.yml create mode 100644 hurricane/pivpn-fedora-nas-setup.md create mode 100755 hurricane/qbt.sh create mode 100755 hurricane/qbt.yml create mode 100755 hurricane/restic-backup.sh create mode 100755 hurricane/restic.sh create mode 100644 hurricane/sbox.sh create mode 100755 hurricane/setup-samba.sh create mode 100755 hurricane/sshfs_mount.sh create mode 100755 hurricane/wg-easy-hostbrr.yml create mode 100644 jellyfin/jellyfin.yml create mode 100644 netcup/Dockerfile create mode 100644 netcup/compose.yml create mode 100644 netcup/usage.sh create mode 100644 sbox.sh create mode 100644 terraform/backend.tf create mode 100644 terraform/main.tf create mode 100644 zeshancv/.dockerignore create mode 100755 zeshancv/Dockerfile create mode 100644 zeshancv/docker-compose.yml create mode 100755 zeshancv/index.html create mode 100644 zeshancv/zt1125.docx diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..2442877 --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +# === Terraform state === +*.tfstate.backup + +# Crash logs +crash.log +crash.*.log + +# === Terraform working dir === +.terraform/ +.terraform.* + +# === Terraform lock files === +# Keep the lock file if you want reproducible provider versions +# Comment out the next line if you do want to commit it +.terraform.lock.hcl + +# === Local override files === +# These are machine/developer specific, never commit them +override.tf +override.tf.json +*_override.tf +*_override.tf.json + +# === Sensitive variable files === +# (add your own if you keep secrets in *.tfvars) +*.tfvars +*.tfvars.json +*.auto.tfvars +*.auto.tfvars.json +# === Other noise === +*.bak +*.swp +*.tmp diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..1b3b62b --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,299 @@ +stages: + - deploy + +deploy_watchtower: + stage: deploy + tags: + - shared + script: + - | + set -euo pipefail + + echo "=== [1] Preparing deploy directory ===" + mkdir -p /root/docker + rm -rf /root/docker/watchtower + cp -r watchtower /root/docker/watchtower + + echo "=== [2] Bringing up Watchtower with docker compose ===" + cd /root/docker/watchtower + docker compose -f watchtower.yml up -d + + CONTAINER_NAME="watchtower" + + echo "=== [3] Waiting a bit for container to (re)start ===" + sleep 5 + + echo "=== [4] Checking container state ===" + docker ps -a --filter "name=${CONTAINER_NAME}" + STATUS="$(docker inspect -f '{{.State.Status}}' "${CONTAINER_NAME}")" || STATUS="unknown" + echo "Container '${CONTAINER_NAME}' status: ${STATUS}" + + if [ "${STATUS}" != "running" ]; then + echo "ERROR: Container '${CONTAINER_NAME}' is not running (status=${STATUS})." + echo "Recent logs for ${CONTAINER_NAME}:" + docker logs --tail=100 "${CONTAINER_NAME}" || echo "No logs found for ${CONTAINER_NAME}" + exit 1 + fi + + echo "Container '${CONTAINER_NAME}' is running ✅" + + echo "=== [5] Waiting for HEALTHCHECK to become healthy (if defined) ===" + MAX_WAIT_SECONDS=120 + SLEEP_INTERVAL=5 + ELAPSED=0 + + while true; do + HEALTH_STATUS="$(docker inspect -f '{{ if .State.Health }}{{ .State.Health.Status }}{{ end }}' "${CONTAINER_NAME}" || true)" + + if [ -z "${HEALTH_STATUS}" ]; then + echo "No HEALTHCHECK defined for '${CONTAINER_NAME}', skipping health verification." + break + fi + + echo "Current health status for '${CONTAINER_NAME}': ${HEALTH_STATUS} (elapsed: ${ELAPSED}s)" + + if [ "${HEALTH_STATUS}" = "healthy" ]; then + echo "Container '${CONTAINER_NAME}' health is healthy ✅" + break + fi + + if [ "${HEALTH_STATUS}" = "unhealthy" ]; then + echo "ERROR: Container '${CONTAINER_NAME}' health is 'unhealthy'." + docker inspect "${CONTAINER_NAME}" | grep -A5 -B2 '"Health"' || true + docker logs --tail=100 "${CONTAINER_NAME}" || true + exit 1 + fi + + if [ "${ELAPSED}" -ge "${MAX_WAIT_SECONDS}" ]; then + echo "ERROR: Container '${CONTAINER_NAME}' health did not become 'healthy' within ${MAX_WAIT_SECONDS}s (last status='${HEALTH_STATUS}')." + docker inspect "${CONTAINER_NAME}" | grep -A5 -B2 '"Health"' || true + docker logs --tail=100 "${CONTAINER_NAME}" || true + exit 1 + fi + + sleep "${SLEEP_INTERVAL}" + ELAPSED=$((ELAPSED + SLEEP_INTERVAL)) + done + + echo "=== [6] Deployment completed successfully ✅ ===" + only: + - main +deploy_jellyfin: + stage: deploy + tags: + - shared + script: + - | + set -euo pipefail + + DEPLOY_DIR="/root/docker/jellyfin" + COMPOSE_FILE="${DEPLOY_DIR}/jellyfin.yml" + CONTAINER_NAME="jellyfin" + + echo "=== [1] Preparing deploy directory (safe) ===" + # We ONLY touch /root/docker/jellyfin, never your data directories. + mkdir -p "${DEPLOY_DIR}" + + # Copy just the compose file from the repo to the deploy dir + cp jellyfin/jellyfin.yml "${COMPOSE_FILE}" + + echo "=== [2] Bringing up Jellyfin with docker compose ===" + cd "${DEPLOY_DIR}" + docker compose -f jellyfin.yml pull + docker compose -f jellyfin.yml up -d + + echo "=== [3] Checking container state ===" + docker ps -a --filter "name=${CONTAINER_NAME}" + + STATUS="$(docker inspect -f '{{.State.Status}}' "${CONTAINER_NAME}")" || STATUS="unknown" + echo "Container '${CONTAINER_NAME}' status: ${STATUS}" + + if [ "${STATUS}" != "running" ]; then + echo "ERROR: Container '${CONTAINER_NAME}' is not running (status=${STATUS})." + echo "Recent logs for ${CONTAINER_NAME}:" + docker logs --tail=100 "${CONTAINER_NAME}" || echo "No logs found for ${CONTAINER_NAME}" + exit 1 + fi + + echo "Container '${CONTAINER_NAME}' is running ✅" + + echo "=== [4] Deployment of Jellyfin completed successfully ✅ ===" + only: + - main +deploy_plex: + stage: deploy + tags: + - shared + script: + - | + set -euo pipefail + + DEPLOY_DIR="/root/docker/plex" + COMPOSE_FILE="${DEPLOY_DIR}/plex.yml" + CONTAINER_NAME="plex" + + echo "=== [1] Preparing deploy directory for Plex (safe) ===" + # Only ever touch /root/docker/plex, never your media/config paths. + mkdir -p "${DEPLOY_DIR}" + + # Copy just the compose file from the repo into the deploy dir + cp plex/plex.yml "${COMPOSE_FILE}" + + echo "=== [2] Bringing up Plex with docker compose ===" + cd "${DEPLOY_DIR}" + docker compose -f plex.yml pull + docker compose -f plex.yml up -d + + echo "=== [3] Checking Plex container state ===" + docker ps -a --filter "name=${CONTAINER_NAME}" + + STATUS="$(docker inspect -f '{{.State.Status}}' "${CONTAINER_NAME}")" || STATUS="unknown" + echo "Container '${CONTAINER_NAME}' status: ${STATUS}" + + if [ "${STATUS}" != "running" ]; then + echo "ERROR: Container '${CONTAINER_NAME}' is not running (status=${STATUS})." + echo "Recent logs for ${CONTAINER_NAME}:" + docker logs --tail=100 "${CONTAINER_NAME}" || echo "No logs found for ${CONTAINER_NAME}" + exit 1 + fi + + echo "Plex container '${CONTAINER_NAME}' is running ✅" + echo "=== [4] Plex deployment completed successfully ✅ ===" + only: + - main + +deploy_wg_easy: + stage: deploy + tags: + - shared + script: + - | + set -euo pipefail + + DEPLOY_DIR="/root/docker/wg-easy" + COMPOSE_FILE="${DEPLOY_DIR}/wg-easy.yml" + CONTAINER_NAME="wg-easy" + + echo "=== [1] Preparing deploy directory for wg-easy (safe) ===" + mkdir -p "${DEPLOY_DIR}" + cp wg-easy/wg-easy.yml "${COMPOSE_FILE}" + + echo "=== [2] Bringing up wg-easy with docker compose ===" + cd "${DEPLOY_DIR}" + docker compose -f wg-easy.yml pull + docker compose -f wg-easy.yml up -d + + echo "=== [3] Checking wg-easy container state ===" + docker ps -a --filter "name=${CONTAINER_NAME}" + STATUS="$(docker inspect -f '{{.State.Status}}' "${CONTAINER_NAME}")" || STATUS="unknown" + echo "Container '${CONTAINER_NAME}' status: ${STATUS}" + + if [ "${STATUS}" != "running" ]; then + echo "ERROR: Container '${CONTAINER_NAME}' is not running (status=${STATUS})." + echo "Recent logs for ${CONTAINER_NAME}:" + docker logs --tail=100 "${CONTAINER_NAME}" || echo "No logs found for ${CONTAINER_NAME}" + exit 1 + fi + + echo "wg-easy container '${CONTAINER_NAME}' is running ✅" + echo "=== [4] wg-easy deployment completed successfully ✅ ===" + only: + - main +deploy_adguard: + stage: deploy + tags: + - shared # make sure your runner has this tag + script: + - | + set -euo pipefail + + DEPLOY_DIR="/root/docker/adguard" + COMPOSE_FILE="${DEPLOY_DIR}/adguard.yml" + CONTAINER_NAME="adguardhome" + + echo "=== [1] Preparing deploy directory for AdGuard Home ===" + # Only manage /root/docker/adguard — we do NOT touch Docker volumes. + mkdir -p "${DEPLOY_DIR}" + + # Copy the compose file from the repo to the deploy directory + cp adguard/adguard.yml "${COMPOSE_FILE}" + + echo "=== [2] Running docker compose (pull + up -d) ===" + cd "${DEPLOY_DIR}" + docker compose -f adguard.yml pull + docker compose -f adguard.yml up -d + + echo "=== [3] Checking container state ===" + docker ps -a --filter "name=${CONTAINER_NAME}" + STATUS="$(docker inspect -f '{{.State.Status}}' "${CONTAINER_NAME}")" || STATUS="unknown" + echo "Container '${CONTAINER_NAME}' status: ${STATUS}" + + if [ "${STATUS}" != "running" ]; then + echo "❌ ERROR: AdGuard Home is not running (status=${STATUS})" + echo "Recent logs:" + docker logs --tail=100 "${CONTAINER_NAME}" || echo "No logs found" + exit 1 + fi + + echo "✅ AdGuard Home container is running." + + echo "=== [4] Verifying static IP on hurricane network ===" + IP_ON_HURRICANE="$(docker inspect -f '{{range .NetworkSettings.Networks}}{{if eq .NetworkID (index (docker network inspect -f \"{{.Id}}\" hurricane) 0)}}{{.IPAddress}}{{end}}{{end}}' "${CONTAINER_NAME}" 2>/dev/null || true)" + + # Fallback simple check if the above is too fancy: + if [ -z "${IP_ON_HURRICANE}" ]; then + IP_ON_HURRICANE="$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "${CONTAINER_NAME}" || true)" + fi + + echo "AdGuard Home IP (as seen by Docker): ${IP_ON_HURRICANE}" + + echo "=== [5] Deployment completed successfully ✅ ===" + only: + - main # run this deploy only when pushing to main + +deploy_portainer: + stage: deploy + tags: + - shared + script: | + set -euo pipefail + + echo "=== [1] Preparing deploy directory for Portainer ===" + mkdir -p /root/docker/portainer + cp portainer/portainer.yml /root/docker/portainer/portainer.yml + + echo "=== [2] Bringing up Portainer ===" + cd /root/docker/portainer + docker compose -f portainer.yml pull + docker compose -f portainer.yml up -d + + echo "=== [3] Checking container status ===" + sleep 3 + docker ps --filter "name=portainer" + only: + - main + +deploy_nextcloud: + stage: deploy + tags: + - shared + script: | + set -euo pipefail + + echo "=== [1] Preparing nextcloud deploy directory ===" + mkdir -p /root/docker/nextcloud + + echo "Copying compose and env files..." + cp nextcloud/nextcloud.yml /root/docker/nextcloud/nextcloud.yml + cp nextcloud/.env /root/docker/nextcloud/.env + + echo "=== [2] Bringing up Nextcloud with docker compose ===" + cd /root/docker/nextcloud + docker compose -f nextcloud.yml pull + docker compose -f nextcloud.yml up -d + + echo "=== [3] Checking Nextcloud container status ===" + sleep 5 + docker ps --filter "name=nextcloud" + only: + - main diff --git a/ansible/ansible.cfg b/ansible/ansible.cfg new file mode 100755 index 0000000..73a0fac --- /dev/null +++ b/ansible/ansible.cfg @@ -0,0 +1,3 @@ +[defaults] +interpreter_python = auto_silent +host_key_checking = False \ No newline at end of file diff --git a/ansible/inventory.ini b/ansible/inventory.ini new file mode 100755 index 0000000..2d3d63d --- /dev/null +++ b/ansible/inventory.ini @@ -0,0 +1,12 @@ +[linux] +general ansible_host=100.120.57.49 ansible_port=54321 +k3s1 ansible_host=100.117.166.126 ansible_port=54321 +k3s2 ansible_host=100.64.200.58 ansible_port=54321 +k3s3 ansible_host=100.83.32.18 ansible_port=54321 +loadbalancer ansible_host=100.75.102.81 ansible_port=54321 +nl ansible_host=100.92.32.17 ansible_port=54321 +pve ansible_host=100.102.23.33 +storage01 ansible_host=100.92.109.78 +ovh ansible_host=p.h-y.st +uk ansible_host=100.122.107.18 ansible_port=54321 +us ansible_host=100.126.105.9 ansible_port=54321 diff --git a/ansible/mount.sh b/ansible/mount.sh new file mode 100755 index 0000000..30507bf --- /dev/null +++ b/ansible/mount.sh @@ -0,0 +1,4 @@ +ansible-playbook -i inventory.ini ssh.yml --vault-password-file ~/.vault_pass.txt +ansible-playbook -i inventory.ini update.yml --vault-password-file ~/.vault_pass.txt +ansible-playbook -i inventory.ini fail2ban.yml --vault-password-file ~/.vault_pass.txt +ansible-playbook -i inventory.ini smb.yml --vault-password-file ~/.vault_pass.txt \ No newline at end of file diff --git a/ansible/ssh.yml b/ansible/ssh.yml new file mode 100755 index 0000000..457897f --- /dev/null +++ b/ansible/ssh.yml @@ -0,0 +1,108 @@ +--- +- name: Phase 1 - Bootstrap SSH Keys and Packages + hosts: linux + remote_user: root + vars_files: + - vault.yml + tasks: + - name: Ensure .ssh directory exists + file: + path: /root/.ssh + state: directory + mode: '0700' + + - name: Deploy SSH Identity (Private and Public Keys) + copy: + dest: "/root/.ssh/{{ item.file }}" + content: "{{ item.content }}" + mode: "{{ item.mode }}" + loop: + - { file: 'id_ed25519', content: "{{ my_private_key }}", mode: '0400' } + - { file: 'id_ed25519.pub', content: "{{ my_public_key }}", mode: '0644' } + when: my_private_key is defined + + - name: Authorize Public Key for Root + authorized_key: + user: root + key: "{{ my_public_key }}" + when: my_public_key is defined + + - name: Configure Passwordless Sudo for Zeshan + copy: + dest: /etc/sudoers.d/zeshan + content: "zeshan ALL=(ALL) NOPASSWD: ALL" + mode: '0440' + +- name: Phase 2 - Secure SSH Port + hosts: linux + become: yes + vars: + new_ssh_port: 54321 + tasks: + - name: Handle SELinux for custom SSH port (RHEL) + block: + - name: Install SELinux management tools + package: + name: policycoreutils-python-utils + state: present + - name: Allow SSH on custom port in SELinux + seport: + ports: "{{ new_ssh_port }}" + proto: tcp + setype: ssh_port_t + state: present + when: ansible_os_family == 'RedHat' + + - name: Configure SSH Port in sshd_config + lineinfile: + path: /etc/ssh/sshd_config + regexp: '^#?Port\s+' + line: "Port {{ new_ssh_port }}" + notify: Restart SSH + + - name: Handle Systemd Socket Activation (Debian/Ubuntu) + block: + - name: Check if SSH socket exists + stat: + path: /lib/systemd/system/ssh.socket + register: ssh_socket_file + + - name: Create socket override directory + file: + path: /etc/systemd/system/ssh.socket.d + state: directory + when: ssh_socket_file.stat.exists + + - name: Set Port in Systemd Socket Override + copy: + dest: /etc/systemd/system/ssh.socket.d/addresses.conf + content: | + [Socket] + ListenStream= + ListenStream={{ new_ssh_port }} + when: ssh_socket_file.stat.exists + notify: + - Reload Systemd + - Stop SSH Service + - Restart SSH Socket + + handlers: + - name: Reload Systemd + systemd: + daemon_reload: yes + + - name: Stop SSH Service + service: + name: ssh + state: stopped + when: ansible_os_family == 'Debian' + + - name: Restart SSH Socket + service: + name: ssh.socket + state: restarted + + - name: Restart SSH + service: + name: "{{ (ansible_os_family == 'Debian') | ternary('ssh', 'sshd') }}" + state: restarted diff --git a/ansible/update.yml b/ansible/update.yml new file mode 100755 index 0000000..1aaffe9 --- /dev/null +++ b/ansible/update.yml @@ -0,0 +1,65 @@ +--- +- name: Universal Linux System Maintenance + hosts: linux + remote_user: root + # Gather facts once at the start to determine OS family + gather_facts: yes + + tasks: + # --- DEBIAN / UBUNTU / PROXMOX --- + - name: Debian-based Maintenance + when: ansible_os_family == "Debian" + block: + - name: Update apt cache and upgrade all packages + apt: + upgrade: dist + update_cache: yes + cache_valid_time: 3600 + + - name: Install baseline toolset (Debian) + apt: + name: + - htop + - make + - git + - curl + - samba + - fail2ban + - sshpass + - sudo + state: present + + - name: Remove obsolete packages and kernels + apt: + autoremove: yes + autoclean: yes + + # --- RHEL / ALMALINUX / ROCKY --- + - name: RedHat-based Maintenance + when: ansible_os_family == "RedHat" + block: + - name: Upgrade all packages (DNF) + dnf: + name: "*" + state: latest + update_cache: yes + + - name: Install baseline toolset (RHEL) + dnf: + name: [htop, make, nano, git, curl, fail2ban, samba, sshpass] + state: present + + - name: Clean DNF metadata and cache + command: dnf clean all + changed_when: false + + # --- FINAL CHECK --- + - name: Check if reboot is required + stat: + path: /var/run/reboot-required + register: reboot_required_file + + - name: Notify if reboot is needed + debug: + msg: "Host {{ inventory_hostname }} requires a reboot to apply updates." + when: reboot_required_file.stat.exists \ No newline at end of file diff --git a/ansible/vault.yml b/ansible/vault.yml new file mode 100755 index 0000000..cad0439 --- /dev/null +++ b/ansible/vault.yml @@ -0,0 +1,50 @@ +$ANSIBLE_VAULT;1.1;AES256 +64376334353039653233386464663633646238333537623265623334633061633337353161376638 +6532373239376635333664653866343239393062316439650a353063653131363166353931333237 +66646661393663376263323565626331353137323330343664633230373732616566353231623631 +6263376364633036630a393839306239383066623436356235393263373438623630396139326536 +32636630336136646636623932383337386331616230663063366337303836633065346239616261 +32333439363664306235366366346238653735383231393530633833323131333937663065353738 +34666135656366313633373839376138396566653132353637616261343264366436326337373130 +30323435613438363432393431313666653063323333633338626265313531356164633764343837 +34363466616462626436633939303538333531336537393131306136336663636538303739343030 +63393930343530626363666364626537636231343334393132386537386537356237396634323234 +34366464313864636639623037613666326430376239386439646665333966653938613465366565 +35616462333762386532616634656534616365643030653335353132636462633666363639353738 +31636435623333656262323565383161316164363239643531616162623865666266616639366365 +36376634386535333765383366323939386133633230373539343936376239646465373266313635 +31303266353732616533663433626635383962626566396233323265316437326238326131336538 +30623365633765383138306537303266336436386631396435663366626531656230336565376630 +32303933343131346161633437363738363336336666666264653532316334633833653134383738 +32373730343833376334376439376166376666356265366565306562303539333061633061353861 +62353533326238313961613864346432313937356430373134626265366638393036373930326364 +34323630313964396165393761613764643633643738353838626238636433366134613333633565 +65346635356538386164303034323332303736353038656364373435343037336536363439393733 +39333833623033393062346261376666643236663132343265613438313639326532383132636338 +36623463383935306164656435383938376138323637653964306364313534306564363562633130 +39386236373333643165363231306132663036373232653236316230356533373338363636306639 +39313130626337353663633465643030363466356238626364363132353033366237353834376564 +65346638383538313861343163653435633734343230313737623136373832323537616438633130 +62623536343935333539646537383930633339316535343364623230353861336239373535633136 +64366231656238633233333834663831366538653837613137643163613330333538373362343733 +62373839396666366266646435336561643031393763396366646262666165616130656437396238 +64666236623534353536356562616132646561623165346265326231363963323365393336316565 +66363963346164623962393463646130323138613132383436396562613137343034303634323237 +36326364333731633233393265306462303038383762356233346266663363653034623164353236 +31656339353264316337633166383734343335303331376261626531366165326239363836316566 +36666466653230393137316234306363356433613964393065313563303062363065393232613265 +34333764336434373361326462643739363361376231623265323564653963313337616363353936 +32313934343037333836653235653761623133373635626433313935613734653336376633653933 +65353063323431646437643032383835613865343130336366646338663430346336396163396538 +30386339663930666539346666303664663836353435666164346635383237343431633730616336 +34636539343466346433373138323664653561343532383536313738633831613931383635323434 +30316136383434346437633562383934353764366537646566646239653136623163393130326538 +37393439383232363266646564623134323439353834353139303066633539363738303932623436 +36373439363961613337666532633933336566386330353534306363313436333763333465373861 +33386537346462656430373363303235663565313538353732303064363365343734626237393830 +30316362333738636237393733313234336536643338626134613065363862643962333836663639 +37343637326538363635343032353936333938666430346633323966653438636265356532313066 +37336131396138636438383163613933353130623837346561386638366562343862376266323833 +37316231346532623934303962633365656433663661333062303033656133336563356435333164 +34653735303865396330653931336362353334373935653566326166623863616461616635636231 +3239 diff --git a/client.ovpn b/client.ovpn new file mode 100644 index 0000000..7e855e1 --- /dev/null +++ b/client.ovpn @@ -0,0 +1,78 @@ +client +proto udp +explicit-exit-notify +remote 154.41.135.47 8080 +dev tun +resolv-retry infinite +nobind +persist-key +persist-tun +remote-cert-tls server +verify-x509-name server_cyni6qc4D05RIAyn name +auth SHA256 +auth-nocache +cipher AES-128-GCM +tls-client +tls-version-min 1.2 +tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 +ignore-unknown-option block-outside-dns +setenv opt block-outside-dns # Prevent Windows 10 DNS leak +verb 3 + +-----BEGIN CERTIFICATE----- +MIIB1zCCAX2gAwIBAgIUcv+sBGhEfd1XbXBndZcYoaVvB4cwCgYIKoZIzj0EAwIw +HjEcMBoGA1UEAwwTY25fcDhocDdNWGV3eFZzdWtJQTAeFw0yNTEwMDUxODIyNTJa +Fw0zNTEwMDMxODIyNTJaMB4xHDAaBgNVBAMME2NuX3A4aHA3TVhld3hWc3VrSUEw +WTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATBFzEmd5ULOahTH2L7cB87t/WqkmOw +035tgz6BmPzuIeJhPfnlbSUO1PwtdcjVbAVYxIUiWUGFa+3Y7kVXz1C3o4GYMIGV +MAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFLsU5suHhUaH2i86fkSeKlC8BZFnMFkG +A1UdIwRSMFCAFLsU5suHhUaH2i86fkSeKlC8BZFnoSKkIDAeMRwwGgYDVQQDDBNj +bl9wOGhwN01YZXd4VnN1a0lBghRy/6wEaER93VdtcGd1lxihpW8HhzALBgNVHQ8E +BAMCAQYwCgYIKoZIzj0EAwIDSAAwRQIhAKTF9TUEK6qvR9eKdsm+g+jUOPgSa2oz +8hCMVmYBFE5TAiA+RRfPqAHwzKeXXodSrw7PsACKpdPeUX29U6QRxdqvrA== +-----END CERTIFICATE----- + + +-----BEGIN CERTIFICATE----- +MIIB2TCCAX+gAwIBAgIRAOrCPSzfYpHv2Bbgwps7LbYwCgYIKoZIzj0EAwIwHjEc +MBoGA1UEAwwTY25fcDhocDdNWGV3eFZzdWtJQTAeFw0yNTEwMDUxODIzMDJaFw0z +NTEwMDMxODIzMDJaMBExDzANBgNVBAMMBnJvdXRlcjBZMBMGByqGSM49AgEGCCqG +SM49AwEHA0IABFjSYA3bpnjB0fm/o45ay71tSCqvlllj7YllWEdwI2NDqtmSA2S6 +MjA4doQ1hiKCxLuk4tj1bZHNy5a2805nmiajgaowgacwCQYDVR0TBAIwADAdBgNV +HQ4EFgQUl2uced7PlC3MB/2OhiVPEbaNcWkwWQYDVR0jBFIwUIAUuxTmy4eFRofa +Lzp+RJ4qULwFkWehIqQgMB4xHDAaBgNVBAMME2NuX3A4aHA3TVhld3hWc3VrSUGC +FHL/rARoRH3dV21wZ3WXGKGlbweHMBMGA1UdJQQMMAoGCCsGAQUFBwMCMAsGA1Ud +DwQEAwIHgDAKBggqhkjOPQQDAgNIADBFAiAycBNgtvXYK103GWt1pr11EyqrFc37 +/g+5LzRN4E+CbAIhANCS7h72bw+t1Swk7UPSYiUOJPS6ZjxETXOr0W78FHwx +-----END CERTIFICATE----- + + +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgRZ9xWBze4ypq7ipO +klOaIuJDTiiKocZT6SxVZT41LEmhRANCAARY0mAN26Z4wdH5v6OOWsu9bUgqr5ZZ +Y+2JZVhHcCNjQ6rZkgNkujIwOHaENYYigsS7pOLY9W2RzcuWtvNOZ5om +-----END PRIVATE KEY----- + + +# +# 2048 bit OpenVPN static key +# +-----BEGIN OpenVPN Static key V1----- +6d95023c7fe6dd1793518359f8bfce71 +5de38910df988a47d4253bf3fe68629b +71d27ac6b49aaef68a22f6d3b80a63a3 +d1d57565d78f78ae4cae0b782169facd +9a3245acbbb4a80059c758bb066433e8 +b080ed19a1523344f0b3785a429b5f76 +b0c2051a3d90437b624c09b1959e3b73 +dddcf6b34282a5e84595b053f0d50340 +d8ac7b9fd4fecd4a45350cede6c55fe2 +22ded165b513c567adebc6181cd4fef9 +dbd5387e25b83f9b23be67e1866c22ac +3cd5961b401dcc6d6a022248dbe927e4 +56ba8a804f01804ea8c7d48e19e96e55 +6c47f25b9affcc71a6ae6beadd287e53 +0aaa69d91c004cc5a22cf8a53bdf7b76 +f1a3de39124c9cdc90f04ba549e578e4 +-----END OpenVPN Static key V1----- + diff --git a/cloudflare/Dockerfile b/cloudflare/Dockerfile new file mode 100644 index 0000000..637aed6 --- /dev/null +++ b/cloudflare/Dockerfile @@ -0,0 +1,18 @@ +FROM alpine:latest + +# Install tools +RUN apk add --no-cache curl bash jq + +# Copy the script +COPY cloudflare-ddns.sh /usr/local/bin/cloudflare-ddns.sh + +# --- FIX: This line removes Windows line endings if they exist --- +RUN sed -i 's/\r$//' /usr/local/bin/cloudflare-ddns.sh + +# Make it executable +RUN chmod +x /usr/local/bin/cloudflare-ddns.sh + +# Setup cron (Runs every 5 minutes and logs to Docker) +RUN echo "*/5 * * * * /usr/local/bin/cloudflare-ddns.sh > /proc/1/fd/1 2>&1" > /etc/crontabs/root + +CMD ["crond", "-f", "-l", "2"] \ No newline at end of file diff --git a/cloudflare/checkip.sh b/cloudflare/checkip.sh new file mode 100755 index 0000000..c97d7b4 --- /dev/null +++ b/cloudflare/checkip.sh @@ -0,0 +1,75 @@ +#!/usr/bin/env bash +LOG_FILE="/var/log/public_ip_monitor.log" +LAST_IP_FILE="/var/log/last_ip.txt" +MAKE_DIR="/root/hurricane/cloudflare/zones" # CHANGE THIS to your Makefile directory + +# Make sure log files exist +touch "$LOG_FILE" +touch "$LAST_IP_FILE" + +while true; do + TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S") + echo "============================================" | tee -a "$LOG_FILE" + echo "[$TIMESTAMP] Checking public IP..." | tee -a "$LOG_FILE" + + IP="" + METHOD="" + + # Try api.ipify.org + echo "[$TIMESTAMP] Trying api.ipify.org..." | tee -a "$LOG_FILE" + IP=$(curl -s --max-time 10 https://api.ipify.org) + + if [[ -n "$IP" ]]; then + METHOD="api.ipify.org" + echo "[$TIMESTAMP] SUCCESS: Retrieved IP: $IP" | tee -a "$LOG_FILE" + else + echo "[$TIMESTAMP] FAILED: api.ipify.org did not return an IP." | tee -a "$LOG_FILE" + + echo "[$TIMESTAMP] Trying ifconfig.me..." | tee -a "$LOG_FILE" + IP=$(curl -s --max-time 10 http://ifconfig.io) + + if [[ -n "$IP" ]]; then + METHOD="ifconfig.me" + echo "[$TIMESTAMP] SUCCESS: Retrieved IP: $IP" | tee -a "$LOG_FILE" + else + echo "[$TIMESTAMP] FAILED: ifconfig.me did not return an IP." | tee -a "$LOG_FILE" + + echo "[$TIMESTAMP] Trying dig opendns..." | tee -a "$LOG_FILE" + IP=$(dig +short myip.opendns.com @resolver1.opendns.com) + + if [[ -n "$IP" ]]; then + METHOD="dig opendns" + echo "[$TIMESTAMP] SUCCESS: Retrieved IP: $IP" | tee -a "$LOG_FILE" + else + IP="FAILED TO RESOLVE" + METHOD="All methods failed" + echo "[$TIMESTAMP] ERROR: All methods failed to retrieve IP." | tee -a "$LOG_FILE" + fi + fi + fi + + if [[ "$IP" == "FAILED TO RESOLVE" ]]; then + echo "[$TIMESTAMP] ERROR: Could not determine public IP." | tee -a "$LOG_FILE" + else + # Read previous IP + LAST_IP=$(cat "$LAST_IP_FILE") + + if [[ "$IP" != "$LAST_IP" ]]; then + echo "[$TIMESTAMP] Detected IP change: $LAST_IP --> $IP" | tee -a "$LOG_FILE" + + echo "[$TIMESTAMP] Running 'make apply' in $MAKE_DIR..." | tee -a "$LOG_FILE" + cd "$MAKE_DIR" + make apply >> "$LOG_FILE" 2>&1 + + echo "$IP" > "$LAST_IP_FILE" + echo "[$TIMESTAMP] 'make apply' completed." | tee -a "$LOG_FILE" + else + echo "[$TIMESTAMP] No change detected. No action taken." | tee -a "$LOG_FILE" + fi + fi + + echo "[$TIMESTAMP] Sleeping 5 minutes..." | tee -a "$LOG_FILE" + sleep 300 +done + + diff --git a/cloudflare/cloudflare-ddns.sh b/cloudflare/cloudflare-ddns.sh new file mode 100644 index 0000000..3bc4e34 --- /dev/null +++ b/cloudflare/cloudflare-ddns.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +echo "[$(date)] --- DDNS Check Started ---" + +# 1. Validate variables are not empty +if [ -z "$CF_API_TOKEN" ] || [ -z "$CF_ZONE_ID" ] || [ -z "$CF_RECORD_NAME" ]; then + echo "ERROR: One or more environment variables (TOKEN, ZONE_ID, RECORD_NAME) are missing!" + exit 1 +fi + +# 2. Get current public IP (Trying two services for reliability) +NEW_IP=$(curl -s https://api.ipify.org || curl -s https://ifconfig.me/ip) + +if [[ ! $NEW_IP =~ ^[0-9]{1,3}(\.[0-9]{1,3}){3}$ ]]; then + echo "ERROR: Could not get a valid Public IP." + exit 1 +fi + +# 3. Get the current Record info from Cloudflare +RECORD_DATA=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/dns_records?name=$CF_RECORD_NAME&type=A" \ + -H "Authorization: Bearer $CF_API_TOKEN" \ + -H "Content-Type: application/json") + +# Extract Record ID and Current IP from the JSON response +RECORD_ID=$(echo "$RECORD_DATA" | jq -r '.result[0].id // empty') +OLD_IP=$(echo "$RECORD_DATA" | jq -r '.result[0].content // empty') + +if [ -z "$RECORD_ID" ]; then + echo "ERROR: Could not find DNS record for $CF_RECORD_NAME. Check your Zone ID and Name." + exit 1 +fi + +# 4. Compare and Update +if [ "$NEW_IP" = "$OLD_IP" ]; then + echo "IP is still $OLD_IP. No update needed." +else + echo "IP changed from $OLD_IP to $NEW_IP. Updating Cloudflare..." + + UPDATE_RESPONSE=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/dns_records/$RECORD_ID" \ + -H "Authorization: Bearer $CF_API_TOKEN" \ + -H "Content-Type: application/json" \ + --data "{\"type\":\"A\",\"name\":\"$CF_RECORD_NAME\",\"content\":\"$NEW_IP\",\"ttl\":120,\"proxied\":false}") + + SUCCESS=$(echo "$UPDATE_RESPONSE" | jq -r '.success') + + if [ "$SUCCESS" = "true" ]; then + echo "SUCCESS: Cloudflare updated to $NEW_IP" + else + echo "FAILURE: Update failed. Response: $UPDATE_RESPONSE" + fi +fi \ No newline at end of file diff --git a/cloudflare/docker-compose.yml b/cloudflare/docker-compose.yml new file mode 100644 index 0000000..82d67f6 --- /dev/null +++ b/cloudflare/docker-compose.yml @@ -0,0 +1,9 @@ +services: + cloudflare-updater: + build: . + container_name: cloudflare-ddns + restart: always + environment: + - CF_API_TOKEN=tDRW0bR8oiRI3xLYAOIGT_FVqIejif7hqk93W2Sc + - CF_ZONE_ID=0f670677e7c36e9fe8f8e6a1d1c72cbf + - CF_RECORD_NAME=home.ztariq.com \ No newline at end of file diff --git a/cloudflare/terraform.sh b/cloudflare/terraform.sh new file mode 100755 index 0000000..e73fbf2 --- /dev/null +++ b/cloudflare/terraform.sh @@ -0,0 +1,27 @@ +docker run --rm -it -v "$PWD":/app -w /app hashicorp/terraform:latest init +export AWS_ACCESS_KEY_ID="696EwxMMRUABP" +export AWS_SECRET_ACCESS_KEY="Ow5uqEka8Uzk0ea4Ag4wPacO4tiz5MsQV3JF4GuK" +export AWS_DEFAULT_REGION="eus3" +export AWS_EC2_METADATA_DISABLED=true +aws --endpoint-url https://YOUR-S3-ENDPOINT s3 ls s3://terraform + + +docker run --rm -it \ + -v "$PWD":/app -w /app \ + -e AWS_ACCESS_KEY_ID \ + -e AWS_SECRET_ACCESS_KEY \ + -e AWS_DEFAULT_REGION=us-east-1 \ + hashicorp/terraform:latest apply + +docker run -d \ + --name syncthing \ + -e PUID=1000 \ + -e PGID=1000 \ + -e TZ=Europe/London \ + -p 8384:8384 \ # Web UI + -p 22000:22000/tcp \ # Sync (TCP) + -p 22000:22000/udp \ # QUIC (UDP) + -p 21027:21027/udp \ # Local discovery + -v ./sync/config:/config \ + -v ./sync/data:/data \ + lscr.io/linuxserver/syncthing:latest diff --git a/asd b/cloudflare/zones/azuredevops/backend.tf old mode 100644 new mode 100755 similarity index 100% rename from asd rename to cloudflare/zones/azuredevops/backend.tf diff --git a/cloudflare/zones/azuredevops/main.tf b/cloudflare/zones/azuredevops/main.tf new file mode 100755 index 0000000..b11622c --- /dev/null +++ b/cloudflare/zones/azuredevops/main.tf @@ -0,0 +1,41 @@ +terraform { + required_providers { + cloudflare = { + source = "cloudflare/cloudflare" + version = "~> 5" + } + } +} + +provider "cloudflare" { + api_token = var.cloudflare_apitoken +} +locals { + azure_records = { + root_a = { name = "@", type = "A", content = "185.139.7.37", ttl = 1, proxied = true } + root_uk_aaaa = { name = "@", type = "AAAA", content = "2a12:ab46:5344:fd::a", ttl = 1, proxied = true } + + autodiscover = { name = "autodiscover", type = "CNAME", content = "eu1.workspace.org.", ttl = 360, proxied = false } + mail = { name = "mail", type = "CNAME", content = "eu1.workspace.org.", ttl = 360, proxied = false } + mail_mx = { name = "@", type = "MX", content = "eu1.workspace.org.", priority = 10, proxied = false } + + spf_txt = { name = "@", content = "v=spf1 include:_spf.workspace.org -all", type = "TXT", ttl = 3600 } + verify_txt = { name = "workspace-verification", content = "44856072-5cde-458d-86c9-c8f86c0ab7bd", type = "TXT", ttl = 360 } + dkim_txt = { name = "cf8DDF69382578883._domainKey", content = "v=DKIM1;k=rsa;h=sha256;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr/Mu/P1bfiMIGkHNnvhLB1oVcAaSOg4QoKTCF9N6F/eVV7JCoERTSSHiMyS74V/xq0i3kUJYjspFgrXKicVaEl6jHmRJ4jSyb2b52frWzLakW1SB9LJwXZ/n0PDm90iSPToQOEvQTSl+pg9B9RWfhqr3Tv5hz9YvsjQP1tn7yNwJSbyhU944PWZimu0ryqwAQyLGNP+CsIeMTinwe0B8Rdtc52TusInwhcMddL9XgGYi/IsWsuri85R5yvzIOKk/sklfuDHOSQoCap7RW+Lm22B/DzC0spdjV42n0k4tGtv6Rz0bYT/2DpcqRVIQd9EAcTeUFq3qOYZCHsN0Q+iS2QIDAQAB", type = "TXT", ttl = 3600 } + dmarc_txt = { name = "_dmarc", content = "v=DMARC1; p=quarantine; rua=mailto:postmaster@azuredevops.co.uk; ruf=mailto:postmaster@azuredevops.co.uk; fo=1; adkim=s; aspf=s", type = "TXT", ttl = 3600 } + } +} + + +resource "cloudflare_dns_record" "this" { + for_each = local.azure_records + + zone_id = var.zone_id + name = each.value.name + content = each.value.content + type = each.value.type + ttl = each.value.ttl + + proxied = lookup(each.value, "proxied", false) + priority = lookup(each.value, "priority", null) +} \ No newline at end of file diff --git a/cloudflare/zones/azuredevops/terraform.tfstate b/cloudflare/zones/azuredevops/terraform.tfstate new file mode 100644 index 0000000..b283d5d --- /dev/null +++ b/cloudflare/zones/azuredevops/terraform.tfstate @@ -0,0 +1,258 @@ +{ + "version": 4, + "terraform_version": "1.13.3", + "serial": 59, + "lineage": "87d4a795-db19-508c-0f53-1e6bdd9b5d93", + "outputs": {}, + "resources": [ + { + "mode": "managed", + "type": "cloudflare_dns_record", + "name": "this", + "provider": "provider[\"registry.terraform.io/cloudflare/cloudflare\"]", + "instances": [ + { + "index_key": "autodiscover", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "eu1.workspace.org.", + "created_on": "2025-10-03T10:35:51Z", + "data": null, + "id": "2c03ba416645db773ec3b0bdc7514d1e", + "meta": "{}", + "modified_on": "2025-10-04T13:37:12Z", + "name": "autodiscover.azuredevops.co.uk", + "priority": null, + "proxiable": true, + "proxied": false, + "settings": { + "flatten_cname": false, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 360, + "type": "CNAME", + "zone_id": "d2697ef5d69f322186bdbc812fdad150" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "dkim_txt", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "v=DKIM1;k=rsa;h=sha256;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr/Mu/P1bfiMIGkHNnvhLB1oVcAaSOg4QoKTCF9N6F/eVV7JCoERTSSHiMyS74V/xq0i3kUJYjspFgrXKicVaEl6jHmRJ4jSyb2b52frWzLakW1SB9LJwXZ/n0PDm90iSPToQOEvQTSl+pg9B9RWfhqr3Tv5hz9YvsjQP1tn7yNwJSbyhU944PWZimu0ryqwAQyLGNP+CsIeMTinwe0B8Rdtc52TusInwhcMddL9XgGYi/IsWsuri85R5yvzIOKk/sklfuDHOSQoCap7RW+Lm22B/DzC0spdjV42n0k4tGtv6Rz0bYT/2DpcqRVIQd9EAcTeUFq3qOYZCHsN0Q+iS2QIDAQAB", + "created_on": "2025-10-03T10:35:51Z", + "data": null, + "id": "d5bf0503497e76584ffbe03173f8d644", + "meta": "{}", + "modified_on": "2025-10-03T10:35:51Z", + "name": "cf8DDF69382578883._domainKey", + "priority": null, + "proxiable": false, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 3600, + "type": "TXT", + "zone_id": "d2697ef5d69f322186bdbc812fdad150" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "dmarc_txt", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "v=DMARC1; p=quarantine; rua=mailto:postmaster@azuredevops.co.uk; ruf=mailto:postmaster@azuredevops.co.uk; fo=1; adkim=s; aspf=s", + "created_on": "2025-10-03T10:35:50Z", + "data": null, + "id": "50d45619b699b9482803d7f4a624127a", + "meta": "{}", + "modified_on": "2025-10-03T10:35:50Z", + "name": "_dmarc.azuredevops.co.uk", + "priority": null, + "proxiable": false, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 3600, + "type": "TXT", + "zone_id": "d2697ef5d69f322186bdbc812fdad150" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "mail", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "eu1.workspace.org.", + "created_on": "2025-10-03T10:35:51Z", + "data": null, + "id": "9f0db2a3b0ad84d1037580611c84a348", + "meta": "{}", + "modified_on": "2025-10-04T13:37:12Z", + "name": "mail.azuredevops.co.uk", + "priority": null, + "proxiable": true, + "proxied": false, + "settings": { + "flatten_cname": false, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 360, + "type": "CNAME", + "zone_id": "d2697ef5d69f322186bdbc812fdad150" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "root_a", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "185.139.7.37", + "created_on": "2025-10-03T10:35:51Z", + "data": null, + "id": "9868e7bf3f8cc58583eda37a9f45434f", + "meta": "{}", + "modified_on": "2025-10-04T13:37:12Z", + "name": "azuredevops.co.uk", + "priority": null, + "proxiable": true, + "proxied": true, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 1, + "type": "A", + "zone_id": "d2697ef5d69f322186bdbc812fdad150" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "root_uk_aaaa", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "2a12:ab46:5344:fd::a", + "created_on": "2025-10-04T13:33:21Z", + "data": null, + "id": "a9db6975674cf2e19cc3e99cf79a2904", + "meta": "{}", + "modified_on": "2025-10-04T13:37:12Z", + "name": "azuredevops.co.uk", + "priority": null, + "proxiable": true, + "proxied": true, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 1, + "type": "AAAA", + "zone_id": "d2697ef5d69f322186bdbc812fdad150" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "spf_txt", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "v=spf1 include:_spf.workspace.org -all", + "created_on": "2025-10-03T10:35:50Z", + "data": null, + "id": "7fef7251bb88c2b501343951705cdb3b", + "meta": "{}", + "modified_on": "2025-10-03T10:35:50Z", + "name": "azuredevops.co.uk", + "priority": null, + "proxiable": false, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 3600, + "type": "TXT", + "zone_id": "d2697ef5d69f322186bdbc812fdad150" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "verify_txt", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "44856072-5cde-458d-86c9-c8f86c0ab7bd", + "created_on": "2025-10-03T10:35:50Z", + "data": null, + "id": "43850a81936261408d3cd135c064c199", + "meta": "{}", + "modified_on": "2025-10-03T10:35:50Z", + "name": "workspace-verification.azuredevops.co.uk", + "priority": null, + "proxiable": false, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 360, + "type": "TXT", + "zone_id": "d2697ef5d69f322186bdbc812fdad150" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + } + ] + } + ], + "check_results": null +} diff --git a/cloudflare/zones/azuredevops/variables.tf b/cloudflare/zones/azuredevops/variables.tf new file mode 100755 index 0000000..d8be6af --- /dev/null +++ b/cloudflare/zones/azuredevops/variables.tf @@ -0,0 +1,15 @@ +variable "cloudflare_apitoken" { + description = "Cloudflare API token" + type = string + sensitive = true +} + +variable "zone_id" { + description = "Cloudflare zone ID" + type = string +} + +variable "current_ip" { + description = "Current public IP address" + type = string +} \ No newline at end of file diff --git a/cloudflare/zones/dreamartdecor/backend.tf b/cloudflare/zones/dreamartdecor/backend.tf new file mode 100755 index 0000000..4c16d8c --- /dev/null +++ b/cloudflare/zones/dreamartdecor/backend.tf @@ -0,0 +1,6 @@ +terraform { + backend "pg" { + conn_str = "postgres://zeshan:Shan33779488@100.115.152.20:5432/terraform?sslmode=disable" + schema_name = "dreamartdecor-state" + } +} diff --git a/cloudflare/zones/dreamartdecor/main.tf b/cloudflare/zones/dreamartdecor/main.tf new file mode 100755 index 0000000..7f3581d --- /dev/null +++ b/cloudflare/zones/dreamartdecor/main.tf @@ -0,0 +1,78 @@ +terraform { + required_providers { + cloudflare = { + source = "cloudflare/cloudflare" + version = "5.8.2" + } + } +} + +provider "cloudflare" { + api_token = var.cloudflare_apitoken +} +locals { + dream_records = { + dream_mail = { + name = "mail" + content = "168.119.13.219" + type = "A" + ttl = 86400 + } + dream_mx = { + name = "@" + content = "mail.dreamartdecor.com" + type = "MX" + ttl = 86400 + priority = 10 + } + dream_autoconfig = { + name = "autoconfig" + content = "mail.dreamartdecor.com" + type = "CNAME" + ttl = 86400 + } + dream_mail_aaaa = { + name = "mail" + content = "2a01:4f8:242:4460::2" + type = "AAAA" + ttl = 86400 + } + dream_txt_spf = { + name = "@" + content = "v=spf1 a mx ip4:168.119.13.219 ip6:2a01:4f8:242:4460::2 ~all" + type = "TXT" + ttl = 86400 + } + dream_txt_dkim = { + name = "x._domainkey" + content = "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1GW9inpeYtcxMWY3JjUnVFzsPgKCZOfOCETVvk5wWOYZr9LJGz0YnJu3xGIZeJiFWDOgGV/xorzlcAzDqumh58cYPkDIzYVgbOp8vw1qS+a3iKMtRM99kyadEmUDyKjHk11HiCADNaEAgCD1vaKlQzRGAmdP15XhFC7xprSPQPAi6z/l2Iy3wsLdMpYR9P+tiSpS0msI86PBj4Kj5JRuzyHMw4YCqLRKMOIXTKO/zBWOAJOc/eKbjMyTT/iUJe9YE5yuzUHSZNT57aTHIGGadhFhMrkCNVFMyuCGZFt7fCF+Xzvu0iljYK/Uw4Zru73fTaUtq8SMcnvLjj7lm0fpvwIDAQAB" + type = "TXT" + ttl = 86400 + } + dream_dmarc = { + name = "_dmarc" + content = "v=DMARC1; p=none; rua=mailto:4a937e10a8e144c89cb11f1272c159c0@dmarc-reports.cloudflare.net" + type = "TXT" + ttl = 86400 + } + dream_www = { + name = "www" + content = "dreamartdecor.com" + type = "CNAME" + ttl = 1 + proxied = true + } + } +} +resource "cloudflare_dns_record" "this" { + for_each = local.dream_records + + zone_id = var.zone_id + name = each.value.name + content = each.value.content + type = each.value.type + ttl = each.value.ttl + + proxied = lookup(each.value, "proxied", false) + priority = lookup(each.value, "priority", null) +} \ No newline at end of file diff --git a/cloudflare/zones/dreamartdecor/variables.tf b/cloudflare/zones/dreamartdecor/variables.tf new file mode 100755 index 0000000..d8be6af --- /dev/null +++ b/cloudflare/zones/dreamartdecor/variables.tf @@ -0,0 +1,15 @@ +variable "cloudflare_apitoken" { + description = "Cloudflare API token" + type = string + sensitive = true +} + +variable "zone_id" { + description = "Cloudflare zone ID" + type = string +} + +variable "current_ip" { + description = "Current public IP address" + type = string +} \ No newline at end of file diff --git a/cloudflare/zones/ztariq/backend.tf b/cloudflare/zones/ztariq/backend.tf new file mode 100755 index 0000000..e69de29 diff --git a/cloudflare/zones/ztariq/main.tf b/cloudflare/zones/ztariq/main.tf new file mode 100755 index 0000000..a5f9596 --- /dev/null +++ b/cloudflare/zones/ztariq/main.tf @@ -0,0 +1,83 @@ +terraform { + required_providers { + cloudflare = { + source = "cloudflare/cloudflare" + version = "~> 5" + } + } +} + +provider "cloudflare" { + api_token = var.cloudflare_apitoken +} + +locals { + ztariq_records = { + # --- A Records --- + beszel = { name = "beszel", type = "A", content = "198.23.169.195", ttl = 1, proxied = true } + ca = { name = "ca", type = "A", content = "154.12.117.17", ttl = 1, proxied = false } + nc = { name = "nc", type = "A", content = "154.12.117.17", ttl = 1, proxied = false } + nl = { name = "nl", type = "A", content = "62.84.172.70", ttl = 1, proxied = false } + reg = { name = "reg", type = "A", content = "154.12.117.17", ttl = 1, proxied = false } + tea = { name = "tea", type = "A", content = "198.23.169.195", ttl = 1, proxied = false } + uk = { name = "uk", type = "A", content = "185.139.7.37", ttl = 1, proxied = false } + uk2 = { name = "uk2", type = "A", content = "154.41.135.47", ttl = 1, proxied = false } + uptime = { name = "uptime", type = "A", content = "198.23.169.195", ttl = 1, proxied = true } + us = { name = "us", type = "A", content = "198.23.169.195", ttl = 1, proxied = false } + root_a = { name = "@", type = "A", content = "185.139.7.37", ttl = 1, proxied = true } + # --- AAAA Records --- + nl_aaaa = { name = "nl", type = "AAAA", content = "2a12:bec4:1821:f0::a", ttl = 1, proxied = false } + root_uk_aaaa = { name = "@", type = "AAAA", content = "2a12:ab46:5344:fd::a", ttl = 1, proxied = true } + root_uk_uk = { name = "uk", type = "AAAA", content = "2a12:ab46:5344:fd::a", ttl = 1, proxied = false } + + # --- CNAME Records --- + autodiscover = { name = "autodiscover", type = "CNAME", content = "eu1.workspace.org.", ttl = 360, proxied = false } + mail = { name = "mail", type = "CNAME", content = "eu1.workspace.org.", ttl = 360, proxied = false } + + # --- MX Records --- + mx_root = { name = "@", type = "MX", content = "eu1.workspace.org.", priority = 10, ttl = 360 } + + # --- TXT Records --- + dmarc = { + name = "_dmarc" + type = "TXT" + content = "v=DMARC1; p=quarantine; rua=mailto:postmaster@ztariq.com; ruf=mailto:postmaster@ztariq.com; fo=1; adkim=s; aspf=s" + ttl = 3600 + } + dkim = { + name = "nd8ddf6995beebee4._domainkey" + type = "TXT" + content = "v=DKIM1; k=rsa; h=sha256; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoi3yX1W5V6a9QbEXo00k9JCZ8Vew5rQEanHLIY0cOxCauAIZZIrhQsexZ0j45EFVtfMrBHeddUtolVSSDHvvJg49HzJqWsKOsN061uBgmdN69JEtzme04pRmz/7H+3Y0QDUSYDd+ffYzWaouplFqGuhYkQ5QG2J1JzofcetuAkQICIgWStcOO+av5WoyTdxfqsY64d/XFP4PZJJHX0XA1P2YaSuyNF5c7nv/+a9A6F5+OrgZhFNNWjUurkKKhFzhbR82BUPTXVuG3EI5wSQcIYjhXgINagsmvVyPL1XP584qtnq0ScGysSkh0T3Vhg/Kob9eHX1du7mZj7G0z3PHmwIDAQAB" + ttl = 360 + } + workspace_verification = { + name = "workspace-verification" + type = "TXT" + content = "f23716dd-2ad6-4dd4-8867-112e3c4c318d" + ttl = 360 + } + spf = { + name = "@" + type = "TXT" + content = "v=spf1 include:_spf.workspace.org -all" + ttl = 360 + } + } +} + +resource "cloudflare_dns_record" "ztariq" { + for_each = local.ztariq_records + + zone_id = var.zone_id + name = each.value.name + type = each.value.type + content = each.value.content + ttl = each.value.ttl + + proxied = lookup(each.value, "proxied", null) + priority = lookup(each.value, "priority", null) + + lifecycle { + prevent_destroy = false + } +} diff --git a/cloudflare/zones/ztariq/terraform.tfstate b/cloudflare/zones/ztariq/terraform.tfstate new file mode 100644 index 0000000..c37c323 --- /dev/null +++ b/cloudflare/zones/ztariq/terraform.tfstate @@ -0,0 +1,648 @@ +{ + "version": 4, + "terraform_version": "1.13.3", + "serial": 67, + "lineage": "86dbab99-bb75-e967-6f01-8134ccc693e6", + "outputs": {}, + "resources": [ + { + "mode": "managed", + "type": "cloudflare_dns_record", + "name": "ztariq", + "provider": "provider[\"registry.terraform.io/cloudflare/cloudflare\"]", + "instances": [ + { + "index_key": "autodiscover", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "eu1.workspace.org.", + "created_on": "2025-10-03T10:41:38Z", + "data": null, + "id": "1da92323f9f6e5a00e02df0edac16554", + "meta": "{}", + "modified_on": "2025-10-09T08:38:58Z", + "name": "autodiscover.ztariq.com", + "priority": null, + "proxiable": true, + "proxied": false, + "settings": { + "flatten_cname": false, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 360, + "type": "CNAME", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "beszel", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "198.23.169.195", + "created_on": "2025-10-03T10:41:38Z", + "data": null, + "id": "e1824f42449cb3fed3024633819bd345", + "meta": "{}", + "modified_on": "2025-10-03T10:41:38Z", + "name": "beszel.ztariq.com", + "priority": null, + "proxiable": true, + "proxied": true, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 1, + "type": "A", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "ca", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "154.12.117.17", + "created_on": "2025-10-03T10:41:37Z", + "data": null, + "id": "8eedfb649e973cacfcb117155ccbca61", + "meta": "{}", + "modified_on": "2025-10-03T10:41:37Z", + "name": "ca.ztariq.com", + "priority": null, + "proxiable": true, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 1, + "type": "A", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "dkim", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "v=DKIM1; k=rsa; h=sha256; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoi3yX1W5V6a9QbEXo00k9JCZ8Vew5rQEanHLIY0cOxCauAIZZIrhQsexZ0j45EFVtfMrBHeddUtolVSSDHvvJg49HzJqWsKOsN061uBgmdN69JEtzme04pRmz/7H+3Y0QDUSYDd+ffYzWaouplFqGuhYkQ5QG2J1JzofcetuAkQICIgWStcOO+av5WoyTdxfqsY64d/XFP4PZJJHX0XA1P2YaSuyNF5c7nv/+a9A6F5+OrgZhFNNWjUurkKKhFzhbR82BUPTXVuG3EI5wSQcIYjhXgINagsmvVyPL1XP584qtnq0ScGysSkh0T3Vhg/Kob9eHX1du7mZj7G0z3PHmwIDAQAB", + "created_on": "2025-10-03T10:41:38Z", + "data": null, + "id": "e7d739b620e7de9ddf4acc1d35d9104e", + "meta": "{}", + "modified_on": "2025-10-03T10:41:38Z", + "name": "nd8ddf6995beebee4._domainkey.ztariq.com", + "priority": null, + "proxiable": false, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 360, + "type": "TXT", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "dmarc", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "v=DMARC1; p=quarantine; rua=mailto:postmaster@ztariq.com; ruf=mailto:postmaster@ztariq.com; fo=1; adkim=s; aspf=s", + "created_on": "2025-10-03T10:41:38Z", + "data": null, + "id": "d687c8ca6f4cd2057d1607c77797b8dd", + "meta": "{}", + "modified_on": "2025-10-03T10:41:38Z", + "name": "_dmarc.ztariq.com", + "priority": null, + "proxiable": false, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 3600, + "type": "TXT", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "mail", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "eu1.workspace.org.", + "created_on": "2025-10-03T10:41:38Z", + "data": null, + "id": "8adb370489931da4b8726c8142b468b2", + "meta": "{}", + "modified_on": "2025-10-09T08:38:58Z", + "name": "mail.ztariq.com", + "priority": null, + "proxiable": true, + "proxied": false, + "settings": { + "flatten_cname": false, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 360, + "type": "CNAME", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "mx_root", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "eu1.workspace.org.", + "created_on": "2025-10-03T10:41:38Z", + "data": null, + "id": "1853b26b8d52a41c5ef0f4212c41696f", + "meta": "{}", + "modified_on": "2025-10-03T10:41:38Z", + "name": "ztariq.com", + "priority": 10, + "proxiable": false, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 360, + "type": "MX", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "nc", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "154.12.117.17", + "created_on": "2025-10-03T10:41:37Z", + "data": null, + "id": "9188fe0d253b8094f19320d4afff3d9a", + "meta": "{}", + "modified_on": "2025-10-03T10:41:37Z", + "name": "nc.ztariq.com", + "priority": null, + "proxiable": true, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 1, + "type": "A", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "nl", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "62.84.172.70", + "created_on": "2025-10-03T10:41:38Z", + "data": null, + "id": "18b04c8ced7b1ae3bcf5fc873e1fbdf8", + "meta": "{}", + "modified_on": "2025-10-03T10:41:38Z", + "name": "nl.ztariq.com", + "priority": null, + "proxiable": true, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 1, + "type": "A", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "nl_aaaa", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "2a12:bec4:1821:f0::a", + "created_on": "2025-10-03T10:41:37Z", + "data": null, + "id": "f6bffdbdb7f94832d39186a147687fe8", + "meta": "{}", + "modified_on": "2025-10-03T10:41:37Z", + "name": "nl.ztariq.com", + "priority": null, + "proxiable": true, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 1, + "type": "AAAA", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "reg", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "154.12.117.17", + "created_on": "2025-10-09T08:38:58Z", + "data": null, + "id": "2f92ab4eb7475d3c9b678f49abbc9ae3", + "meta": "{}", + "modified_on": "2025-10-09T08:38:58Z", + "name": "reg", + "priority": null, + "proxiable": true, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 1, + "type": "A", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "root_a", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "185.139.7.37", + "created_on": "2025-10-03T10:41:37Z", + "data": null, + "id": "1d1e80fd88cbed6b00ddf0ac4d856e0f", + "meta": "{}", + "modified_on": "2025-10-04T13:37:26Z", + "name": "ztariq.com", + "priority": null, + "proxiable": true, + "proxied": true, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 1, + "type": "A", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "root_uk_aaaa", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "2a12:ab46:5344:fd::a", + "created_on": "2025-10-04T13:30:31Z", + "data": null, + "id": "69fa5646418278ab2d865b509349f85d", + "meta": "{}", + "modified_on": "2025-10-04T14:52:55Z", + "name": "ztariq.com", + "priority": null, + "proxiable": true, + "proxied": true, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 1, + "type": "AAAA", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "root_uk_uk", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "2a12:ab46:5344:fd::a", + "created_on": "2025-10-04T13:32:56Z", + "data": null, + "id": "041c4d5e021eeb72b16ce82b3215d114", + "meta": "{}", + "modified_on": "2025-10-04T14:52:55Z", + "name": "uk.ztariq.com", + "priority": null, + "proxiable": true, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 1, + "type": "AAAA", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "spf", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "v=spf1 include:_spf.workspace.org -all", + "created_on": "2025-10-03T10:41:38Z", + "data": null, + "id": "a7dc36bb0d2542c1d9534e70af352a70", + "meta": "{}", + "modified_on": "2025-10-03T10:41:38Z", + "name": "ztariq.com", + "priority": null, + "proxiable": false, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 360, + "type": "TXT", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "tea", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "198.23.169.195", + "created_on": "2025-10-03T10:41:37Z", + "data": null, + "id": "12be831a0a9cfcaac555f82acbabec70", + "meta": "{}", + "modified_on": "2025-10-03T10:41:37Z", + "name": "tea.ztariq.com", + "priority": null, + "proxiable": true, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 1, + "type": "A", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "uk", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "185.139.7.37", + "created_on": "2025-10-03T10:41:37Z", + "data": null, + "id": "c932fd20294dd7e63dd49bcbb42dd46d", + "meta": "{}", + "modified_on": "2025-10-03T10:41:37Z", + "name": "uk.ztariq.com", + "priority": null, + "proxiable": true, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 1, + "type": "A", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "uk2", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "154.41.135.47", + "created_on": "2025-10-05T13:44:38Z", + "data": null, + "id": "3e85a02d4d60fdd2746eded881daf70b", + "meta": "{}", + "modified_on": "2025-10-05T14:03:16Z", + "name": "uk2.ztariq.com", + "priority": null, + "proxiable": true, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 1, + "type": "A", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "uptime", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "198.23.169.195", + "created_on": "2025-10-03T10:41:38Z", + "data": null, + "id": "79f47fe2d5ec8575b215fddd6bbb1f6b", + "meta": "{}", + "modified_on": "2025-10-03T10:41:38Z", + "name": "uptime.ztariq.com", + "priority": null, + "proxiable": true, + "proxied": true, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 1, + "type": "A", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "us", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "198.23.169.195", + "created_on": "2025-10-03T10:41:37Z", + "data": null, + "id": "3532e6cb018f85319c15430387aba340", + "meta": "{}", + "modified_on": "2025-10-03T10:41:37Z", + "name": "us.ztariq.com", + "priority": null, + "proxiable": true, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 1, + "type": "A", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + }, + { + "index_key": "workspace_verification", + "schema_version": 0, + "attributes": { + "comment": null, + "comment_modified_on": null, + "content": "f23716dd-2ad6-4dd4-8867-112e3c4c318d", + "created_on": "2025-10-03T10:41:37Z", + "data": null, + "id": "396e522c02d0fe0b716f174d2cdca4e3", + "meta": "{}", + "modified_on": "2025-10-03T10:41:37Z", + "name": "workspace-verification.ztariq.com", + "priority": null, + "proxiable": false, + "proxied": false, + "settings": { + "flatten_cname": null, + "ipv4_only": null, + "ipv6_only": null + }, + "tags": [], + "tags_modified_on": null, + "ttl": 360, + "type": "TXT", + "zone_id": "0f670677e7c36e9fe8f8e6a1d1c72cbf" + }, + "sensitive_attributes": [], + "identity_schema_version": 0 + } + ] + } + ], + "check_results": null +} diff --git a/cloudflare/zones/ztariq/variables.tf b/cloudflare/zones/ztariq/variables.tf new file mode 100755 index 0000000..d8be6af --- /dev/null +++ b/cloudflare/zones/ztariq/variables.tf @@ -0,0 +1,15 @@ +variable "cloudflare_apitoken" { + description = "Cloudflare API token" + type = string + sensitive = true +} + +variable "zone_id" { + description = "Cloudflare zone ID" + type = string +} + +variable "current_ip" { + description = "Current public IP address" + type = string +} \ No newline at end of file diff --git a/cv archive/index2.html b/cv archive/index2.html new file mode 100644 index 0000000..5144bfe --- /dev/null +++ b/cv archive/index2.html @@ -0,0 +1,497 @@ + + + + + Zeshan Tariq – DevOps · SRE · SOC + + + + +
+ +
+
+ ZESHAN · AZURE · KUBERNETES +
+ +
+ + +
+

+ Zeshan Tariq +

+
+ SOC · SRE · DEVOPS · DEVSECOPS · KUBERNETES +
+

+ Cloud & platform engineer focused on Azure, Kubernetes, + and secure automation. This page is the signal — the details live in my CV. +

+ +
+
+ + Available for remote roles +
+
Azure · AKS · Terraform
+
CI/CD · GitHub · GitLab
+
SOC · Sentinel · SRE
+
+ + +
+ + + + + +
+
+
Contact
+
+ For remote DevOps, SRE, SOC or DevSecOps work, email me or visit my site. + The CV contains full experience, clients and stack details. +
+
+ +
+ +
+ © Zeshan Tariq + Dark single-page · SVG-driven hero +
+
+ + + + diff --git a/cv archive/index3.html b/cv archive/index3.html new file mode 100644 index 0000000..480175d --- /dev/null +++ b/cv archive/index3.html @@ -0,0 +1,331 @@ + + + + + Zeshan Tariq – DevOps · SRE · SOC + + + + +
+
+
+
Zeshan Tariq
+
+ SOC / SRE / DEVOPS / DEVSECOPS / KUBERNETES +
+
+
+ + Available for remote roles +
+
+ +
+
+

+ Cloud & platform engineer focused on Azure, + Kubernetes, and secure automation. + For full details, see the CV. +

+
+ +
+ + + +
+
+
+ Contact +
+

+ For remote DevOps, SRE, SOC or DevSecOps work, email me or visit my site. +

+
+ +
+ +
+ © Zeshan Tariq · Minimal dark profile +
+
+ + + + diff --git a/cv archive/index4.html b/cv archive/index4.html new file mode 100644 index 0000000..1278b9d --- /dev/null +++ b/cv archive/index4.html @@ -0,0 +1,281 @@ + + + + + ZT – DevOps · SRE · SOC + + + + +
+ +
+
+
Zeshan Tariq
+
+ SOC / SRE / DEVOPS / DEVSECOPS / KUBERNETES +
+
+ +
+ + Available for remote roles · contract & permanent +
+
+ +
+
+

+ Cloud & platform engineer focused on Azure, + Kubernetes, and secure automation. + For full details, see the CV. +

+
+ + +
+ +
+
+ azure-kubernetes-engineer.ts +
+ + + + + + + + + src/azure-kubernetes-engineer.ts + + + + + import { AzureKubernetesServices } from '@azure/kubernetes-engine'; + + + import { Engineer, Experience } from '@professional/core'; + + + export + class + AzureKubernetesEngineer + implements + Engineer { + + + constructor(private azure: AzureKubernetesServices) {} + + + experience + : Experience = { years: 8, + specialties + + : ['application dev','config mgmt','cloud'] + + }; + + + deploySolution(solution: any) { return this.azure.deploy({ solution }); } + + + +
+ +
+
+
+ Contact +
+ +

+ For remote DevOps, SRE, SOC or DevSecOps work, email me or visit my site. +

+
+ + +
+ +
+ © Zeshan Tariq +
+
+ + + + diff --git a/cv archive/index5.html b/cv archive/index5.html new file mode 100644 index 0000000..43ca4b5 --- /dev/null +++ b/cv archive/index5.html @@ -0,0 +1,491 @@ + + + + + Zeshan Tariq – DevOps · SRE · SOC + + + + +
+ +
+
+ Zeshan Tariq · DevOps · SRE · SOC +
+
+ + Available for remote roles · contract & permanent +
+
+ + +
+
+ +
+
+ Profile loaded: SOC / SRE / DevOps / DevSecOps / Kubernetes +
+
+ + +
+
+ Who are you and what do you do? +
+
U
+
+ + +
+
+ +
+
+

Zeshan Tariq

+ SOC · SRE · DevOps · DevSecOps · Kubernetes +

+ I’m a cloud & platform engineer focused on Azure, + Kubernetes, and secure automation — combining + SOC practices with SRE principles to keep systems + reliable and secure. +

+
+
Azure · AKS
+
Kubernetes · Docker
+
Terraform · CI/CD
+
Sentinel · SOC
+
+
+
+ + +
+
+ Can I see the full details of your experience? +
+
U
+
+ + +
+
+ +
+
+ Absolutely. The CV carries all the detail (roles, dates, full stack, and examples). +
+ + Download CV + + + + +
+
+ + +
+
+ In a sentence or two, what kind of work do you do? +
+
U
+
+ + +
+
+ +
+
+ I design, build and operate Azure and Kubernetes platforms, + automate infrastructure with Terraform/Bicep, run + CI/CD pipelines, and use SOC tooling + and SRE metrics to keep services healthy. +
+
+ + +
+
+ Show me a small code sample that represents how you think. +
+
U
+
+ + +
+
+ +
+
+ Here’s a condensed TypeScript-style example that reflects what I do with Azure, AKS and + translating requirements into platform configuration: +
import { AzureKubernetesServices } from '@azure/kubernetes-engine';
+import { Engineer, Experience } from '@professional/core';
+
+export class AzureKubernetesEngineer implements Engineer {
+  constructor(private azureServices: AzureKubernetesServices) {}
+
+  experience: Experience = {
+    years: 8,
+    sectors: ['government', 'consultancy', 'finance'],
+    specialties: [
+      'application development',
+      'configuration management',
+      'public cloud deployment',
+    ],
+  };
+
+  deploySolution(solution: any) {
+    return this.azureServices.deploy({
+      solution,
+      orchestration: 'Kubernetes',
+      cloud: 'Azure',
+    });
+  }
+
+  bridgeBusinessAndTechnology(requirements: any) {
+    return this.azureServices.configure(requirements);
+  }
+}
+
+
+ + +
+
+ How do I contact you if I want to talk about a role? +
+
U
+
+ + +
+
+ +
+
+ The easiest way is email, but you can also find more context on my site. + +
+
+
+
+ +
+ © Zeshan Tariq + Minimal chat-style profile · CV-first +
+
+ + + + diff --git a/cv/Dockerfile b/cv/Dockerfile new file mode 100644 index 0000000..10bf945 --- /dev/null +++ b/cv/Dockerfile @@ -0,0 +1,2 @@ +FROM nginx:alpine +COPY . /usr/share/nginx/html/ diff --git a/cv/compose.yml b/cv/compose.yml new file mode 100644 index 0000000..d3baee6 --- /dev/null +++ b/cv/compose.yml @@ -0,0 +1,10 @@ +services: + cvsite: + image: r.h-y.st/zeshan:latest + container_name: zeshan + restart: always + networks: + - hurricane +networks: + hurricane: + external: true \ No newline at end of file diff --git a/cv/index.html b/cv/index.html new file mode 100644 index 0000000..dc383b1 --- /dev/null +++ b/cv/index.html @@ -0,0 +1,564 @@ + + + + + Zeshan Tariq – Azure DevOps · SRE · SOC · Kubernetes Engineer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ Zeshan Tariq – Azure DevOps, SRE, SOC & Kubernetes Engineer +

+ +
+ +
+
+ Zeshan Tariq · DevOps · SRE · SOC +
+
+ + Available for remote contract & permanent roles +
+
+ + +
+
+ +
+
+ Profile: SOC / SRE / DevOps / DevSecOps / Kubernetes +
+
+ + +
+
+ Who are you and what do you do? +
+
U
+
+ + +
+
+ +
+
+

Zeshan Tariq

+ SOC · SRE · DevOps · DevSecOps · Kubernetes +

+ I’m a cloud & platform engineer focused on Azure, + Kubernetes, and secure automation — + combining SOC practices with SRE principles + to keep systems reliable and secure. +

+
+
Azure · AKS
+
Kubernetes · Docker
+
Terraform · CI/CD
+
Sentinel · SOC
+
+
+
+ + +
+
+ Where can I see your full experience and roles? +
+
U
+
+ + +
+
+ +
+
+ The CV has all the detail — roles, dates, clients, and full stack. +
+ + + Download CV + + + + +
+
+ + +
+
+ In practical terms, what kind of work do you do? +
+
U
+
+ + +
+
+ +
+
+ I design and operate Azure & AKS platforms, automate + infrastructure with Terraform/Bicep, build + CI/CD pipelines, and use SOC tooling + and SRE metrics to keep services secure and reliable. +
+
+ + +
+
+ Show me a small code sample that represents how you think. +
+
U
+
+ + +
+
+ +
+
+ A condensed TypeScript-style example that reflects what I do with Azure, AKS, + and translating requirements into platform configuration: +
import { AzureKubernetesServices } from '@azure/kubernetes-engine';
+import { Engineer, Experience } from '@professional/core';
+
+export class AzureKubernetesEngineer implements Engineer {
+  constructor(private azureServices: AzureKubernetesServices) {}
+
+  experience: Experience = {
+    years: 8,
+    sectors: ['government', 'consultancy', 'finance'],
+    specialties: [
+      'application development',
+      'configuration management',
+      'public cloud deployment',
+    ],
+  };
+
+  deploySolution(solution: any) {
+    return this.azureServices.deploy({
+      solution,
+      orchestration: 'Kubernetes',
+      cloud: 'Azure',
+    });
+  }
+
+  bridgeBusinessAndTechnology(requirements: any) {
+    return this.azureServices.configure(requirements);
+  }
+}
+
+
+ + +
+
+ How do I contact you about a role? +
+
U
+
+ + +
+
+ +
+
+ The simplest way is email — the site and CV give extra context if you need it. + +
+
+
+
+ +
+ © Zeshan Tariq + Chat-style profile · CV-first +
+
+ + + + diff --git a/cv/zt1125.docx b/cv/zt1125.docx new file mode 100644 index 0000000000000000000000000000000000000000..3cfed45047c6dd17ab0b6385575425979ae915cf GIT binary patch literal 33872 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�rr@_!VW&;2PP5eSrDFX$!rpPeS!qCXe{`9id2 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 literal 0 HcmV?d00001 diff --git a/hurricane-main.zip b/hurricane-main.zip deleted file mode 100644 index 6e8bf80e2f3aaf8a4cd73f73bf3156d38aa047b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139715 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%0DQjR_7|o5ZE(1T*`fI#6FInC4 zhh_eER*eh+1=yM}I-6cepy?6OQ>U0Aa|0SDS{*%1_f19p`j!xH_ zJSwAEi~`J21L?$l#pD9tzcUG#u`mRdc&Fb-^;fYl{$=h*7QEyCXLBZwU_%>2M`shT zv7O`9RJ$yaO07|n?_(+kuB&6ZBk*sH{DCIVJ@uzE08QEgn&h|=LL|X|YwmZdygalg zl{L%-z_7k6MDU6&XwiRb>#{EYSR=ewjG~JDTciJ4CDd0`a`p!XJ)Hq1I$V{<<;=cZ zCNB>M1d;|6TAsz{PbXc7p2v zFLQsa^sCE@sKy^#`_~e`x*w&{{MC{xsiC8>xrOTu`_XJPj__(=6TZv?0#RNH6bNK- zBhbRu1nkbrXzu*mPVdLY0@V_Rg%sF{7m)qTHaEM;+5fQFZe~kFO`)v<8{G=xpV`9> z|Hx*)neG1G_5D*I8KSs;X2W{_Bb(zo_OB}$`jr~>CHyz+>&uaQkVF&{pl)FQ0wTOJ zadZ*C16|WVT+Y!D|NA120PZ<(UG4Ut{1$oLp8GPBaQLEf3+R_7fOY1oo2rq&bMrrQ ze_aTF$O;lG9TLeI1X2q6pPPWkz$-B0cSuiX78X_xMxaq}zp|hC;pVT?^7p~Xj}68! zD#Xvl{lB&T>g-%za3e@Y&a;8VT@>bjKK`hwm}ocf7{Ru#SA4w8Y`h<|V*>2cxqj)z zzhU0MR4}vx-`F>%4i}2l0KT#TzS3S&(w2Wd&JA2cV|_;#TU)TBzKx;r&z;d_zq8yV zF|>j87i@GZ>p2+M0oH3J;>S@B}$vffq>E%d6^^e?Q|57A(Qm)*hxn zgL%`ea)vFQe-|Vw;QiGTPXXo|*fzk4q}`2R#>umfWq`x3KpnVx)<@5J6ZoGFCcOpT zjw=E>Ne7N0uLgsZ+XBSJ{m`H?VDu8NP3fU4A+Ax-3I& z94>oFARaZpXgmZsWB+fy{G2`j+Y#&p90K2{km_4?mBT>F%K`?j<|dxt4RCu4pkP`5 zddzis$=!``nUDbHFc?^NSue>O*mw)whz1Tq8BD<@c8-P&wuVj&PGDysKsF}VmaYnH zkfZ|;{MW!3uAXC$O5R||!RW?qQLO~ z6Y#4=rB(I@?Dwg(_!G6fsAr;#1^634Fs`QMJ^6p+|19y#(^;saV%Y#d{ee@Z%kcmX zU+&!ib~3Va{~3E(-87^`vS0wIhX{Z!sbtHaM)@Y}cTq4n8QK^b-bAy+LV*!WJdWN|I#99f+`o9lFfwzD}ay4(DyO}Y74V^sxv*ZH{#V^J1 zx(y-jU*Y+&A)L|v#l+ur`|5u1@+1xwJ)l|yJj@5&yqxa9rda2C+~3?k_7wYyr?R@g zpl!j<#xC~P`$;!bo?8egVh#Ab@T%BCuZ8_VX8{M?)FBK^)&$TEUS3*2AQ$uNeEgH{ zLQxT%0&Md@qCkFJ{>%#mI*8ei>*9TRu3~eh8EOIGLm)f;4(NAvfj~w!zd(PN zX4mQHYGa{c{|oHD=Ns2g5Pw4*VKv|l3lL56OKA%NCEvum<{0Smuqk7-GKYv`~ja5 z{pQo|%Ox=hpTi;sh^_lCC0xb*dRPBI{)2%REA4>8S^)fVlL9Pqp4Wqa`20toY*D0^ z-meFidmquC7au;a>ka(NUi)vk0RsVE0#Vn4f8TLK1AQw9qznApB?W;JLAO9OAX6}x pi3ymK#e|EUg%!-hZOm@M&cn>Z&CJ8b!N$&E#KObL31;Eu_&*d(X2Jjf diff --git a/hurricane/.env b/hurricane/.env new file mode 100755 index 0000000..ddef663 --- /dev/null +++ b/hurricane/.env @@ -0,0 +1,68 @@ +# General settings +WG_HOST=39.33779.xyz +PASSWORD=c0bba9d2-7207-4c18-8133-9c3b01c7514c +TZ=Europe/London +WEBPASSWORD=c0bba9d2-7207-4c18-8133-9c3b01c7514c +PIHOLE=C759tw1j + +# Nginx Proxy Manager settings +NGINX_HTTP_PORT=80 +NGINX_HTTPS_PORT=443 +NGINX_ADMIN_PORT=81 +GITLAB_ROOT_PASSWORD=Shan33779488@! +POSTGRES_PASSWORD=Shan33779488@! +SMTP_PASSWORD=Shan33779488@! +# WireGuard settings +WG_UDP_PORT=51820 +WG_TCP_PORT=51821 + +# Homepage service settings +HOMEPAGE_PORT=3000 + +# gitlab +GITLAB_EXTERNAL_URL=https://41.33779.xyz +DB_NAME=gitlabhq_production +GITLAB_ROOT=KGdB3tMltcRMl/JghwO/jYM5xbomWSziDjcW2pVh/H0= +DB_USER=gitlab +DB_PASS=a656c343-5deb-4355-80c2-c6ad7e5bbf93 +POSTGRES_VERSION=latest +# gitlab Email configuration +EMAIL_ENABLED=true +SMTP_HOST=mail.zeshan.uk +SMTP_PORT=465 +SMTP_USER=tariq@zeshan.uk +SMTP_PASS=Shan33779488@! +SMTP_DOMAIN=zeshan.uk +SMTP_AUTHENTICATION=login +SMTP_ENABLE_STARTTLS_AUTO=true +SMTP_TLS=true +SMTP_OPENSSL_VERIFY_MODE=none +GITLAB_EMAIL_FROM=tariq@zeshan.uk +GITLAB_EMAIL_REPLY_TO=noreply@zeshan.uk +HOSTBRR=^;B*3Al+w.5{ +SMTP_ADDRESS=smtp.example.com +SMTP_PORT=587 +SMTP_USER_NAME=smtp_user@example.com +SMTP_PASSWORD=smtp_password +SMTP_DOMAIN=example.com + +# MariaDB settings for Nextcloud +MYSQL_ROOT_PASSWORD=ce5ef083-99c2-4a8d-bbaa-47728ea144b1 +MYSQL_PASSWORD=d4808430-7aab-4637-b883-3a6c757fde0f +MYSQL_DATABASE=nextcloud +MYSQL_USER=nextcloud +ex +# Nextcloud settings +TRUSTED_PROXIES=ncloud.zeshan.uk +OVERWRITECLIURL=https://ncloud.zeshan.uk +OVERWRITEPROTOCOL=https +NEXTCLOUD_TRUSTED_DOMAINS=ncloud.zeshan.uk +OVERWRITEHOST=ncloud.zeshan.uk + +# code-server +CODE_SERVER_PASSWORD=b681e77c-9ac8-480c-a1dd-1f5c5542f4fd +CODE_SERVER_SUDO_PASSWORD=b681e77c-9ac8-480c-a1dd-1f5c5542f4fd +PROXY_DOMAIN=code.zeshan.uk +# Adjust the workspace path as needed +WORKSPACE_PATH=/mnt/data/code-server/workspace +CODE_SERVER_CONFIF_PATH=/mnt/data/code-server/config \ No newline at end of file diff --git a/hurricane/Makefile b/hurricane/Makefile new file mode 100755 index 0000000..754bddc --- /dev/null +++ b/hurricane/Makefile @@ -0,0 +1,38 @@ +# Makefile for restic backups + +# Hard-coded settings +RESTIC_REPOSITORY := /mnt/data/OneDrive/backup/us +RESTIC_PASSWORD := Shan33779488 +RESTIC_BIN := /usr/bin/restic + +# Sources to back up +SOURCES := /root/docker/ /var/lib/docker/volumes/ + +# Common flags +BACKUP_FLAGS := --verbose +CHECK_FLAGS := --read-data-subset=10% +FORGET_FLAGS := --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --prune + +.PHONY: backup check forget-prune init print-env cron-install cron-remove + +print-env: + @echo "Repository: $(RESTIC_REPOSITORY)"; echo "Sources: $(SOURCES)"; echo "Restic: $(RESTIC_BIN)"; echo "Backup flags: $(BACKUP_FLAGS)" # [web:70] + +init: + RESTIC_REPOSITORY=$(RESTIC_REPOSITORY) RESTIC_PASSWORD=$(RESTIC_PASSWORD) $(RESTIC_BIN) init || true # [web:57] + +backup: + RESTIC_REPOSITORY=$(RESTIC_REPOSITORY) RESTIC_PASSWORD=$(RESTIC_PASSWORD) $(RESTIC_BIN) backup $(SOURCES) $(BACKUP_FLAGS) # [web:57] + +check: + RESTIC_REPOSITORY=$(RESTIC_REPOSITORY) RESTIC_PASSWORD=$(RESTIC_PASSWORD) $(RESTIC_BIN) check $(CHECK_FLAGS) # [web:57] + +forget-prune: + RESTIC_REPOSITORY=$(RESTIC_REPOSITORY) RESTIC_PASSWORD=$(RESTIC_PASSWORD) $(RESTIC_BIN) forget $(FORGET_FLAGS) # [web:57] + +# Install a root crontab entry to run backup every 6 hours at minute 0, with logging +cron-install: + @(crontab -l 2>/dev/null; echo '0 */6 * * * RESTIC_REPOSITORY=$(RESTIC_REPOSITORY) RESTIC_PASSWORD=$(RESTIC_PASSWORD) $(RESTIC_BIN) backup $(SOURCES) $(BACKUP_FLAGS) >> /var/log/restic-backup.log 2>&1') | crontab - # [web:40] + +cron-remove: + @crontab -l | grep -v '$(RESTIC_BIN) backup' | crontab - || true # [web:40] diff --git a/hurricane/ac_runner_mac.sh b/hurricane/ac_runner_mac.sh new file mode 100755 index 0000000..73f3311 --- /dev/null +++ b/hurricane/ac_runner_mac.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash +set -euo pipefail + +# === CONFIG === +GITEA_URL="${GITEA_URL:-https://git.azuredevops.co.uk}" # or export GITEA_URL=... +REG_TOKEN="tQ6K7y2adPYg7Nh1gt0pWrYbBOxkPPcHjfcvfqHE" # must export REG_TOKEN +HOSTNAME_VAL="$(hostname)" +RUNNER_NAME="${RUNNER_NAME:-${HOSTNAME_VAL}-runner}" +RUNNER_LABELS="${RUNNER_LABELS:-${HOSTNAME_VAL}}" +WORK_DIR="${WORK_DIR:-$HOME/act_runner}" +VERSION="v0.2.13" +FILE_VER="${VERSION#v}" +ARCH="darwin-amd64" # for Intel Macs. Use darwin-arm64 on Apple Silicon +BINARY_URL="https://gitea.com/gitea/act_runner/releases/download/${VERSION}/act_runner-${FILE_VER}-${ARCH}" + +if [[ -z "$REG_TOKEN" ]]; then + echo "❌ REG_TOKEN not set. export REG_TOKEN= and re-run." + exit 1 +fi + +mkdir -p "$WORK_DIR" +cd "$WORK_DIR" + +# --- download binary --- +if [[ ! -x "${WORK_DIR}/act_runner" ]]; then + echo "⬇️ Downloading act_runner ${VERSION} for ${ARCH}…" + curl -fL "$BINARY_URL" -o act_runner + chmod +x act_runner +fi + +# --- config.yml --- +if [[ ! -f "${WORK_DIR}/config.yml" ]]; then + cat > "${WORK_DIR}/config.yml" < and re-run." + exit 1 +fi + +mkdir -p "$WORK_DIR" +cd "$WORK_DIR" + +# --- download binary --- +if [[ ! -x "${WORK_DIR}/act_runner" ]]; then + echo "⬇️ Downloading act_runner ${VERSION}…" + curl -fL "$BINARY_URL" -o act_runner + chmod +x act_runner +fi + +# --- config.yml (Docker default image + hostname label) --- +if [[ ! -f "${WORK_DIR}/config.yml" ]]; then + cat > "${WORK_DIR}/config.yml" < "/etc/systemd/system/${SERVICE_NAME}.service" < and re-run." + exit 1 +fi + +mkdir -p "$WORK_DIR" +cd "$WORK_DIR" + +# --- download binary --- +if [[ ! -x "${WORK_DIR}/act_runner" ]]; then + echo "⬇️ Downloading act_runner ${VERSION}…" + curl -fL "$BINARY_URL" -o act_runner + chmod +x act_runner +fi + +# --- config.yml (host executor + leaseweb label) --- +if [[ ! -f "${WORK_DIR}/config.yml" ]]; then + cat > "${WORK_DIR}/config.yml" < "/etc/systemd/system/${SERVICE_NAME}.service" < /etc/fail2ban/jail.local' <> /etc/hosts + echo "Hostname changed to $new_hostname. You may need to re-login for prompt update." +else + echo "Hostname change aborted." +fi diff --git a/hurricane/jellyfin.yml b/hurricane/jellyfin.yml new file mode 100755 index 0000000..16f2266 --- /dev/null +++ b/hurricane/jellyfin.yml @@ -0,0 +1,18 @@ +services: + jellyfin: + image: lscr.io/linuxserver/jellyfin:latest + container_name: jellyfin + environment: + - PUID=1000 + - PGID=1000 + - TZ=Europe/London + volumes: + - /root/jellyfin/config:/config + - /mnt/media/shared/media//tv:/data/tvshows + - /mnt/media/shared/media//movies:/data/movies + ports: + - "8096:8096" # HTTP Web UI + - "8920:8920" # HTTPS Web UI (optional) + - "7359:7359/udp" # Service discovery (optional) + - "1900:1900/udp" # DLNA (optional) + restart: unless-stopped diff --git a/hurricane/minio.yml b/hurricane/minio.yml new file mode 100755 index 0000000..372c2eb --- /dev/null +++ b/hurricane/minio.yml @@ -0,0 +1,21 @@ + minio: + image: minio/minio:latest + container_name: minio + command: server /data --console-address ":9001" + restart: unless-stopped + environment: + MINIO_ROOT_USER: ${MINIO_ROOT_USER} + MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} + # Set these if you’ll access MinIO via a reverse proxy (highly recommended) + MINIO_SERVER_URL: ${MINIO_SERVER_URL:-} # e.g. https://s3.ztariq.com + MINIO_BROWSER_REDIRECT_URL: ${MINIO_BROWSER_REDIRECT_URL:-} # e.g. https://console.ztariq.com + healthcheck: + test: ["CMD", "curl", "-fsS", "http://localhost:9000/minio/health/live"] + interval: 15s + timeout: 3s + retries: 20 + volumes: + - ./minio_data:/data + - ./minio_config:/root/.minio + networks: + - hurricane \ No newline at end of file diff --git a/hurricane/mount.sh b/hurricane/mount.sh new file mode 100755 index 0000000..53f3844 --- /dev/null +++ b/hurricane/mount.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +# Prompt the user for the filesystem type +echo "Select the filesystem type:" +echo "1. NTFS" +echo "2. EXT4" +read -p "Enter your choice (1 or 2): " FS_CHOICE + +# Set filesystem type and default mount options based on user choice +case $FS_CHOICE in + 1) + FS_TYPE="ntfs" + MOUNT_OPTIONS="defaults" + ;; + 2) + FS_TYPE="ext4" + MOUNT_OPTIONS="defaults" + ;; + *) + echo "Invalid choice. Exiting." + exit 1 + ;; +esac + +# Prompt the user for the UUID +read -p "Enter the UUID: " UUID + +# Prompt the user for the mount point +read -p "Enter the mount point (e.g., /mnt/data): " MOUNT_POINT + +# Check if the mount point directory exists, and if not, create it +if [ ! -d "$MOUNT_POINT" ]; then + echo "Creating mount point directory..." + sudo mkdir -p "$MOUNT_POINT" + if [ $? -ne 0 ]; then + echo "Failed to create mount point directory. Please check your permissions." + exit 1 + fi +fi + +# Check if the UUID is already in /etc/fstab +if grep -q "$UUID" /etc/fstab; then + echo "UUID $UUID is already in /etc/fstab. Skipping." +else + # Add the volume to /etc/fstab + echo "UUID=$UUID $MOUNT_POINT $FS_TYPE $MOUNT_OPTIONS 0 0" | sudo tee -a /etc/fstab > /dev/null + if [ $? -eq 0 ]; then + echo "Added UUID $UUID to /etc/fstab for a $FS_TYPE volume." + else + echo "Failed to add UUID to /etc/fstab. Please check your permissions." + exit 1 + fi +fi + +# Mount the volume +echo "Attempting to mount the $FS_TYPE volume..." +sudo mount -a +if [ $? -ne 0 ]; then + echo "Failed to mount. Please check the UUID and your permissions." + exit 1 +fi + +# Check if the mount was successful +if mount | grep -q "$MOUNT_POINT"; then + echo "$FS_TYPE volume with UUID $UUID has been successfully mounted to $MOUNT_POINT." +else + echo "Failed to mount $FS_TYPE volume with UUID $UUID to $MOUNT_POINT." + exit 1 +fi diff --git a/hurricane/mount_smb.sh b/hurricane/mount_smb.sh new file mode 100755 index 0000000..cefa94c --- /dev/null +++ b/hurricane/mount_smb.sh @@ -0,0 +1,89 @@ +#!/bin/bash +set -euo pipefail + +# Script to mount multiple CIFS shares and handle credentials separately per mount +# Compatible with Ubuntu, Debian, RHEL, CentOS, Fedora, AlmaLinux + +# Detect OS type +detect_os() { + if [ -f /etc/os-release ]; then + . /etc/os-release + echo "Detected OS: $NAME ($ID)" + OS=$ID + else + echo "Unsupported OS" + exit 1 + fi +} + +# Install CIFS utilities +install_cifs_utils() { + echo "Installing CIFS utilities..." + if [[ "$OS" == "ubuntu" || "$OS" == "debian" ]]; then + apt-get update -y + apt-get install -y cifs-utils samba + elif [[ "$OS" == "rhel" || "$OS" == "centos" || "$OS" == "fedora" || "$OS" == "almalinux" ]]; then + yum update -y + yum install -y cifs-utils samba + else + echo "Unsupported OS" + exit 1 + fi +} + +# Prompt user for multiple CIFS mount inputs +handle_mounts() { + while true; do + echo + read -p "Enter the CIFS share address (e.g., //server/share): " cifs_share + read -p "Enter the mount point directory (default: /mnt/media): " mount_point + mount_point=${mount_point:-/mnt/media} + + mkdir -p "$mount_point" + + read -p "Enter the username: " username + read -sp "Enter the password: " password + echo + + cred_file="/etc/samba/credentials_$(basename "$mount_point")" + echo -e "username=$username\npassword=$password" > "$cred_file" + chmod 600 "$cred_file" + echo "Credentials stored at $cred_file" + + echo "Mounting $cifs_share at $mount_point..." + + # Try SMB 3.0 first + if ! mount -t cifs "$cifs_share" "$mount_point" \ + -o credentials="$cred_file",vers=3.0,iocharset=utf8,uid=1000,gid=1000,file_mode=0660,dir_mode=0770; then + echo "SMB 3.0 failed, retrying with SMB 3.1.1..." + if ! mount -t cifs "$cifs_share" "$mount_point" \ + -o credentials="$cred_file",vers=3.1.1,iocharset=utf8,uid=1000,gid=1000,file_mode=0660,dir_mode=0770; then + echo "❌ Failed to mount $cifs_share, please check credentials or network." + exit 1 + fi + fi + + echo "✅ Mounted successfully." + + read -p "Add this mount to /etc/fstab for automount at boot? (y/n): " add_fstab + if [[ "$add_fstab" =~ ^[Yy]$ ]]; then + fstab_entry="$cifs_share $mount_point cifs credentials=$cred_file,vers=3.0,iocharset=utf8,uid=1000,gid=1000,file_mode=0660,dir_mode=0770 0 0" + if ! grep -qsF "$fstab_entry" /etc/fstab; then + echo "$fstab_entry" >> /etc/fstab + echo "Added to /etc/fstab" + else + echo "Entry already exists in /etc/fstab" + fi + fi + + read -p "Do you want to add another CIFS mount? (y/n): " more + [[ "$more" =~ ^[Yy]$ ]] || break + done +} + +# Main execution +detect_os +install_cifs_utils +handle_mounts + +echo "🎉 All operations completed." diff --git a/hurricane/nc-backup.sh b/hurricane/nc-backup.sh new file mode 100755 index 0000000..fbf2994 --- /dev/null +++ b/hurricane/nc-backup.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +set -euo pipefail + +BACKUP_DIR="/mnt/s3bucket/nc-bk" + +echo "🛑 Stopping all containers..." +docker stop $(docker ps -q) || true + +echo "🧹 Clearing old backup..." +rm -rf "$BACKUP_DIR" +mkdir -p "$BACKUP_DIR" + +for vol in nextcloud_aio_apache \ + nextcloud_aio_database \ + nextcloud_aio_database_dump \ + nextcloud_aio_mastercontainer \ + nextcloud_aio_nextcloud \ + nextcloud_aio_nextcloud_data \ + nextcloud_aio_onlyoffice \ + nextcloud_aio_redis; do + echo "📦 Backing up $vol..." + docker run --rm \ + -v ${vol}:/volume \ + -v "$BACKUP_DIR":/backup \ + alpine tar -czf /backup/${vol}.tar.gz -C /volume . +done + +echo "✅ Backup complete! Files saved in: $BACKUP_DIR" +ls -lh "$BACKUP_DIR" diff --git a/hurricane/nc-restore.sh b/hurricane/nc-restore.sh new file mode 100755 index 0000000..e9cf2d8 --- /dev/null +++ b/hurricane/nc-restore.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +set -euo pipefail + +BACKUP_DIR="/mnt/s3bucket/nc-bk" + +VOLUMES=( + nextcloud_aio_apache + nextcloud_aio_database + nextcloud_aio_database_dump + nextcloud_aio_mastercontainer + nextcloud_aio_nextcloud + nextcloud_aio_nextcloud_data + nextcloud_aio_onlyoffice + nextcloud_aio_redis +) + +echo "🛑 Stopping all containers..." +docker stop $(docker ps -q) || true + +for vol in "${VOLUMES[@]}"; do + ARCHIVE="$BACKUP_DIR/${vol}.tar.gz" + + # Check if volume exists + if docker volume inspect "$vol" >/dev/null 2>&1; then + echo "📂 Volume $vol already exists" + else + echo "🆕 Creating volume $vol..." + docker volume create "$vol" >/dev/null + fi + + # Restore from archive if present + if [ -f "$ARCHIVE" ]; then + echo "♻️ Restoring $vol from $ARCHIVE..." + docker run --rm \ + -v ${vol}:/volume \ + -v "$BACKUP_DIR":/backup \ + alpine sh -c "rm -rf /volume/* && tar -xzf /backup/${vol}.tar.gz -C /volume" + else + echo "⚠️ No archive found for $vol, skipping." + fi +done + +echo "🚀 Starting all containers..." +docker start $(docker ps -aq) || true + +echo "✅ Restore complete and containers started!" diff --git a/hurricane/pi-hole.yml b/hurricane/pi-hole.yml new file mode 100755 index 0000000..9991bc7 --- /dev/null +++ b/hurricane/pi-hole.yml @@ -0,0 +1,29 @@ +version: '3.8' + +services: + adguardhome: + image: adguard/adguardhome + container_name: adguardhome + restart: always + volumes: + - adguard_work:/opt/adguardhome/work + - adguard_conf:/opt/adguardhome/conf + ports: + - "53:53/tcp" + - "53:53/udp" + - "67:67/udp" + - "68:68/udp" + - "8082:80/tcp" + - "8443:443/tcp" + - "8443:443/udp" + - "3000:3000/tcp" + - "853:853/tcp" + - "784:784/udp" + - "853:853/udp" + - "8853:8853/udp" + - "5443:5443/tcp" + - "5443:5443/udp" + +volumes: + adguard_work: + adguard_conf: diff --git a/hurricane/pivpn-fedora-nas-setup.md b/hurricane/pivpn-fedora-nas-setup.md new file mode 100644 index 0000000..2d7e2de --- /dev/null +++ b/hurricane/pivpn-fedora-nas-setup.md @@ -0,0 +1,185 @@ +# 📘 Guide: Remote Access via PiVPN, Fedora Gateway, and Home NAS + +## 1. 🎯 Goal + +Allow a remote machine (like a VPS in the US or a laptop in Spain) to connect into your **PiVPN WireGuard server** and then securely access devices on your **home LAN** (such as a NAS). + +**End Flow:** +``` +Remote Client (Spain/US VPS) + ⇩ (WireGuard VPN) +PiVPN Server (UK, 10.138.135.1) + ⇩ (peer routing) +Fedora VM (VPN: 10.138.135.3 / LAN: 192.168.1.40) + ⇩ +NAS (192.168.1.207, 192.168.1.216, etc.) +``` + +--- + +## 2. 🛠️ Prerequisites + +Before starting, make sure you have: + +### Knowledge +- Ability to log into your servers via SSH. +- Basic Linux familiarity (running commands, editing files). + +### Tools +- A **PiVPN server** already set up and working with WireGuard. +- A **Fedora VM** on your home LAN with: + - One interface in the VPN (`10.138.135.3`). + - One interface in the home LAN (`192.168.1.40`). +- A **NAS** or devices on your home LAN (`192.168.1.x`). +- At least one **remote client** (US VPS, laptop in Spain, etc.). + +--- + +## 3. 🚦 Step-by-Step Setup + +### Step 1: Connect Remote Client to VPN +- Place config in `/etc/wireguard/vps.conf`. +- Bring it up: + ```bash + sudo wg-quick up vps + ``` +- Verify: + ```bash + sudo wg show vps + ``` + +✅ You should see a handshake with the PiVPN server. + +--- + +### Step 2: Ensure PiVPN allows peer-to-peer +By default, VPN clients can only talk to the server. Enable forwarding: + +1. On **PiVPN server** (`/etc/wireguard/wg0.conf`): + ```ini + PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT + PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT + ``` +2. Apply: + ```bash + sudo sysctl -w net.ipv4.ip_forward=1 + sudo systemctl restart wg-quick@wg0 + ``` + +--- + +### Step 3: Advertise the home LAN via Fedora +On the **PiVPN server**, edit the Fedora peer: + +```ini +[Peer] +PublicKey = +AllowedIPs = 10.138.135.3/32, 192.168.1.0/24 +``` + +This tells the VPN server: *traffic for 192.168.1.x should go to Fedora*. + +--- + +### Step 4: Route home LAN via VPN clients +On your **remote client** (US VPS, Spain laptop), edit config: + +```ini +[Peer] +PublicKey = +AllowedIPs = 10.138.135.0/24, 192.168.1.0/24 +``` + +Reconnect: +```bash +sudo wg-quick down vps +sudo wg-quick up vps +``` + +Now the client knows to send home LAN traffic into the VPN. + +--- + +### Step 5: Enable forwarding & NAT on Fedora +Fedora needs to pass packets between VPN (`fedora`) and LAN (`ens18`). + +```bash +# Enable forwarding +sudo sysctl -w net.ipv4.ip_forward=1 + +# Allow forwarding +sudo iptables -A FORWARD -i fedora -o ens18 -j ACCEPT +sudo iptables -A FORWARD -i ens18 -o fedora -j ACCEPT + +# NAT VPN subnet → Fedora LAN IP +sudo iptables -t nat -A POSTROUTING -s 10.138.135.0/24 -o ens18 -j MASQUERADE +``` + +--- + +### Step 6: Test connectivity +From **remote client**: +```bash +ping 192.168.1.40 # Fedora LAN IP +ping 192.168.1.207 # NAS +ping 192.168.1.216 # Another LAN device +``` + +✅ If Fedora responds but NAS doesn’t → NAT rule missing. +✅ If all respond → setup complete. + +--- + +## 4. 🔄 Making NAT Permanent (Fedora) + +By default, Fedora forgets iptables rules after reboot. + +### Option A (simple, legacy) +```bash +sudo dnf install -y iptables-services +sudo service iptables save +sudo systemctl enable iptables +``` + +### Option B (modern, nftables) +Edit `/etc/nftables.conf`: +```nft +table ip nat { + chain postrouting { + type nat hook postrouting priority 100; + ip saddr 10.138.135.0/24 oifname "ens18" masquerade + } +} +``` + +Apply: +```bash +sudo systemctl enable nftables +sudo systemctl restart nftables +``` + +--- + +## 5. 🔎 Troubleshooting Flow + +``` +[1] VPN up? → sudo wg show + ↓ +[2] Can ping Fedora VPN IP (10.138.135.3)? + ↓ +[3] Can ping Fedora LAN IP (192.168.1.40)? + ↓ +[4] Can ping NAS (192.168.1.x)? + ↙ ↘ + No → Check NAT Yes → Success 🎉 +``` + +--- + +## 6. ✅ End State + +- Remote clients reach Fedora and all devices on home LAN. +- Fedora acts as NAT gateway. +- NAT persists across reboot. +- SSH works on Fedora via port `54321`. +- No DNS/IP leaks — traffic exits via PiVPN server. diff --git a/hurricane/qbt.sh b/hurricane/qbt.sh new file mode 100755 index 0000000..9f5b735 --- /dev/null +++ b/hurricane/qbt.sh @@ -0,0 +1,22 @@ +docker run -d \ + --name=qbittorrent \ + -e PUID=1000 \ + -e PGID=1000 \ + -e TZ="Europe/London" \ + -e VPN_ENABLED=true \ + -e VPN_PROVIDER=pia \ + -e VPN_PIA_USER=p0363376 \ + -e VPN_PIA_PASS=cq89D59uVf \ + -e VPN_PIA_PREFERRED_REGION \ + -e VPN_AUTO_PORT_FORWARD=true \ + -e VPN_LAN_NETWORK="100.64.0.0/10,172.18.0.0/16,192.168.0.0/24" \ + -e VPN_NAMESERVERS="194.169.169.169" \ + -p 8080:8080 \ + -v ./qbittorrent:/config \ + --cap-add=NET_ADMIN \ + --device /dev/net/tun:/dev/net/tun \ + --sysctl net.ipv4.conf.all.src_valid_mark=1 \ + --sysctl net.ipv6.conf.all.disable_ipv6=1 \ + --sysctl net.ipv4.conf.all.rp_filter=2 \ + --sysctl net.ipv4.conf.default.rp_filter=2 \ + ghcr.io/hotio/qbittorrent:latest \ No newline at end of file diff --git a/hurricane/qbt.yml b/hurricane/qbt.yml new file mode 100755 index 0000000..3a341db --- /dev/null +++ b/hurricane/qbt.yml @@ -0,0 +1,39 @@ +services: + qbittorrent: + container_name: qbittorrent + image: ghcr.io/hotio/qbittorrent + ports: + - "8000:8080" + environment: + - PUID=1000 + - PGID=1000 + - UMASK=002 + - TZ=Etc/UTC + - WEBUI_PORTS=8080/tcp,8080/udp + - VPN_ENABLED=true + - VPN_CONF=wg0 + - VPN_PROVIDER=pia + - VPN_LAN_NETWORK=192.168.4.0/24 + - VPN_LAN_LEAK_ENABLED=false + - VPN_EXPOSE_PORTS_ON_LAN + - VPN_AUTO_PORT_FORWARD=true + - VPN_AUTO_PORT_FORWARD_TO_PORTS= + - VPN_KEEP_LOCAL_DNS=false + - VPN_FIREWALL_TYPE=auto + - VPN_HEALTHCHECK_ENABLED=true + - VPN_PIA_USER=p0363376 + - VPN_PIA_PASS=cq89D59uVf + - VPN_PIA_PREFERRED_REGION + - VPN_PIA_DIP_TOKEN=no + - VPN_PIA_PORT_FORWARD_PERSIST=false + - PRIVOXY_ENABLED=false + - UNBOUND_ENABLED=false + volumes: + - /root/data/qbt/config:/config + - /root/data/qbt/data:/data + cap_add: + - NET_ADMIN + sysctls: + - net.ipv4.conf.all.src_valid_mark=1 + - net.ipv6.conf.all.disable_ipv6=1 + restart: always \ No newline at end of file diff --git a/hurricane/restic-backup.sh b/hurricane/restic-backup.sh new file mode 100755 index 0000000..d9450da --- /dev/null +++ b/hurricane/restic-backup.sh @@ -0,0 +1,26 @@ + +#!/usr/bin/env bash +set -euo pipefail + +# === Restic Config === +export RESTIC_REPOSITORY="/mnt/windows/OneDrive/backup/pi" +export RESTIC_PASSWORD_FILE="/root/.restic-pass" + +# === Logging === +LOGFILE="/var/log/restic-backup.log" + +echo "[$(date)] === Restic backup started ===" | tee -a "$LOGFILE" + +# === Run backup === +restic backup \ + /mnt/data/docker/ \ + /mnt/data/nextcloud/ \ + >> "$LOGFILE" 2>&1 + +# === Retention: Keep only last 2 days === +restic forget \ + --keep-within 48h \ + --prune \ + >> "$LOGFILE" 2>&1 + +echo "[$(date)] === Restic backup finished ===" | tee -a "$LOGFILE" diff --git a/hurricane/restic.sh b/hurricane/restic.sh new file mode 100755 index 0000000..d8863a7 --- /dev/null +++ b/hurricane/restic.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +export RESTIC_PASSWORD='Shan33779488@@' +export RESTIC_REPOSITORY='/mnt/raid1/backup/restic' + +LOG_FILE="/var/log/restic_backup.log" +BACKUP_DATE=$(date +%F) + +# Safety check +if ! mountpoint -q /mnt/raid1; then + echo "$(date): RAID not mounted. Aborting." >> "$LOG_FILE" + exit 1 +fi + +# Init repo if not exists +if [ ! -d "$RESTIC_REPOSITORY" ]; then + restic init >> "$LOG_FILE" 2>&1 +fi + +{ + echo "$(date): Starting Restic backup..." + restic backup /var/lib/nextcloud /var/lib/docker --tag "$BACKUP_DATE" --verbose + + echo "$(date): Forgetting old backups..." + restic forget --keep-last 1 --prune + + echo "$(date): Checking repo integrity..." + restic check + + echo "$(date): Backup complete." +} >> "$LOG_FILE" 2>&1 diff --git a/hurricane/sbox.sh b/hurricane/sbox.sh new file mode 100644 index 0000000..a1f9df1 --- /dev/null +++ b/hurricane/sbox.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +# Define your Hetzner Storage Box details +STORAGE_BOX_USER="u554364" +STORAGE_BOX_HOST="u554364.your-storagebox.de" +MOUNT_POINT="/mnt/data" +SSH_KEY_PATH="/root/.ssh/id_ed25519" +PORT="23" + +# Install required dependencies +echo "Installing required dependencies..." +apt update +apt install -y sshfs fuse3 + +# Ensure FUSE is loaded +echo "Loading FUSE kernel module..." +sudo modprobe fuse + +# Ensure fuse.conf allows user mounts +echo "Configuring fuse.conf..." +echo "user_allow_other" | sudo tee -a /etc/fuse.conf + +# Create a systemd mount unit file +echo "Creating systemd mount unit..." +cat </dev/null 2>&1 && ! command -v smb >/dev/null 2>&1; then + echo "📦 Installing Samba..." + case "$DISTRO_FAMILY" in + ubuntu|debian) + apt-get update -y + DEBIAN_FRONTEND=noninteractive apt-get install -y samba samba-common-bin + ;; + almalinux|rocky|centos|rhel|fedora) + dnf install -y samba samba-client + ;; + *) + echo "❌ Unsupported distro: $DISTRO_FAMILY" + exit 1 + ;; + esac + fi +} + +# Install Samba +install_samba + +# Stop AD-DC service if it’s installed +systemctl disable --now samba-ad-dc 2>/dev/null || true + +# Ensure directory exists +mkdir -p "$SHARE_PATH" + +# Ensure user exists (no home, no login) +if ! id -u "$SMB_USER" >/dev/null 2>&1; then + echo "ℹ️ Creating system user $SMB_USER (no home, no login)" + useradd -M -s /usr/sbin/nologin "$SMB_USER" +fi + +# Set directory ownership +chown -R "$SMB_USER":"$SMB_USER" "$SHARE_PATH" + +# Backup smb.conf once +if [ -f /etc/samba/smb.conf ] && [ ! -f /etc/samba/smb.conf.bak ]; then + cp -a /etc/samba/smb.conf /etc/samba/smb.conf.bak +fi + +# Use the mount point name as the share name +SHARE_NAME="$MOUNT_POINT" + +# Remove any old section with same name +awk -v name="[$SHARE_NAME]" ' + BEGIN {skip=0} + /^\[/ { + if ($0 == name) {skip=1; next} + else {skip=0} + } + skip==0 {print} +' /etc/samba/smb.conf > /etc/samba/smb.conf.tmp +mv /etc/samba/smb.conf.tmp /etc/samba/smb.conf + +# Append new share config +cat <> /etc/samba/smb.conf + +[$SHARE_NAME] + path = $SHARE_PATH + browseable = yes + read only = no + guest ok = no + valid users = $SMB_USER + create mask = 0664 + directory mask = 0775 +EOF + +# Validate config +testparm -s >/dev/null + +# Prompt for Samba password +echo "🔑 Set a Samba password for $SMB_USER:" +smbpasswd -a "$SMB_USER" +smbpasswd -e "$SMB_USER" + +# Open firewall +if command -v ufw >/dev/null 2>&1; then + ufw allow Samba || true +elif command -v firewall-cmd >/dev/null 2>&1; then + firewall-cmd --permanent --add-service=samba || true + firewall-cmd --reload || true +fi + +# Enable and start services +case "$DISTRO_FAMILY" in + ubuntu|debian) + systemctl enable --now smbd + systemctl enable --now nmbd 2>/dev/null || true + ;; + almalinux|rocky|centos|rhel|fedora) + systemctl enable --now smb + systemctl enable --now nmb + ;; +esac + +IP_ADDR="$(hostname -I | awk '{print $1}')" + +echo +echo "✅ Samba share created!" +echo " Path: $SHARE_PATH" +echo " User: $SMB_USER" +echo " Share: \\\\$IP_ADDR\\$SHARE_NAME" +echo +echo "Test with: smbclient -L //$IP_ADDR -U $SMB_USER" diff --git a/hurricane/sshfs_mount.sh b/hurricane/sshfs_mount.sh new file mode 100755 index 0000000..daef08d --- /dev/null +++ b/hurricane/sshfs_mount.sh @@ -0,0 +1 @@ +sudo sshfs -o allow_other,port=54321,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 root@hurricane.tail872446.ts.net:/mnt/raid /mnt/raid diff --git a/hurricane/wg-easy-hostbrr.yml b/hurricane/wg-easy-hostbrr.yml new file mode 100755 index 0000000..8521826 --- /dev/null +++ b/hurricane/wg-easy-hostbrr.yml @@ -0,0 +1,31 @@ +services: + wg-easy: + container_name: wg-easy + image: ghcr.io/wg-easy/wg-easy + environment: + WG_HOST: hostbrr.azuredevops.co.uk + PASSWORD_HASH: '$$2a$$12$$nMu2fSWPkmefVLdIf68Qle/QK/9oZx/Jmp2HfjZmo6R8V/AtVKD82' + PORT: 51821 + WG_PORT: 53298 + LANG: en + WG_DEFAULT_DNS: '94.140.14.14, 94.140.15.15' + ports: + - "53298:53298/udp" # Changed from 51820 to 53298 + - "51821:51821/tcp" + volumes: + - wg-easy-data:/etc/wireguard + cap_add: + - NET_ADMIN + - SYS_MODULE + sysctls: + net.ipv4.conf.all.src_valid_mark: 1 + net.ipv4.ip_forward: 1 + restart: always + networks: + - hostbrr_hurricane +volumes: + wg-easy-data: + +networks: + hostbrr_hurricane: + external: true # This assumes the network already exists. You can create it with: docker network create hurricane diff --git a/jellyfin/jellyfin.yml b/jellyfin/jellyfin.yml new file mode 100644 index 0000000..6fa6604 --- /dev/null +++ b/jellyfin/jellyfin.yml @@ -0,0 +1,19 @@ +services: + jellyfin: + image: lscr.io/linuxserver/jellyfin:latest + container_name: jellyfin + environment: + - PUID=1000 + - PGID=1000 + - TZ=Europe/London + volumes: + - /root/docker/jellyfin/config:/config + - /mnt/data/media/tv:/data/tvshows + - /mnt/data/media/movies:/data/movies + restart: unless-stopped + networks: + - hurricane + +networks: + hurricane: + external: true \ No newline at end of file diff --git a/netcup/Dockerfile b/netcup/Dockerfile new file mode 100644 index 0000000..cbfc614 --- /dev/null +++ b/netcup/Dockerfile @@ -0,0 +1,363 @@ +FROM ubuntu:24.04 + +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + openssh-client \ + openssl \ + curl \ + sshfs \ + restic \ + fuse3 \ + sshpass && \ + rm -rf /var/lib/apt/lists/* + +WORKDIR /app +COPY id_ed25519.enc /app/id_ed25519.enc + +RUN cat > /app/run.sh << 'SCRIPT' +#!/bin/bash +set -euo pipefail + +# ══════════════════════════════════════════════════════════════════════════════ +# VALIDATION +# ══════════════════════════════════════════════════════════════════════════════ +REQUIRED_VARS=(KEY_PASSWORD REMOTE_HOST RESTIC_PASSWORD SSH_PASSWORD) +for var in "${REQUIRED_VARS[@]}"; do + if [[ -z "${!var:-}" ]]; then + echo "❌ Error: Missing required variable: $var" + exit 1 + fi +done + +MODE="${MODE:-BACKUP}" +MOUNT_REMOTE="${MOUNT_REMOTE:-root@n.h-y.st:/mnt/data}" +MOUNT_POINT="/mnt/data" +RESTIC_REPO="$MOUNT_POINT/restic-repo" +COMPOSE_DIR="${COMPOSE_DIR:-/root/docker}" + +echo " +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + 🚀 Backup/Restore Tool + Mode : $MODE + Target : root@$REMOTE_HOST + Compose : $COMPOSE_DIR + Mount : $MOUNT_REMOTE +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +" + +# ══════════════════════════════════════════════════════════════════════════════ +# CLEANUP TRAP +# ══════════════════════════════════════════════════════════════════════════════ +cleanup() { + echo "🧹 Cleaning up local secrets..." + rm -f ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub +} +trap cleanup EXIT + +# ══════════════════════════════════════════════════════════════════════════════ +# DECRYPT SSH KEY +# ══════════════════════════════════════════════════════════════════════════════ +echo "🔑 Decrypting SSH key..." +mkdir -p ~/.ssh && chmod 700 ~/.ssh + +if ! openssl enc -d -aes-256-cbc -pbkdf2 \ + -in /app/id_ed25519.enc \ + -out ~/.ssh/id_ed25519 \ + -pass pass:"$KEY_PASSWORD" 2>/dev/null; then + echo "❌ Failed to decrypt SSH key — check KEY_PASSWORD" + exit 1 +fi +chmod 600 ~/.ssh/id_ed25519 +ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub 2>/dev/null || true + +# ══════════════════════════════════════════════════════════════════════════════ +# SSH HELPERS +# ══════════════════════════════════════════════════════════════════════════════ +KEY_SSH() { + ssh \ + -o StrictHostKeyChecking=no \ + -o ConnectTimeout=10 \ + -o BatchMode=yes \ + -o ServerAliveInterval=15 \ + -o ServerAliveCountMax=3 \ + -i ~/.ssh/id_ed25519 \ + "$@" +} + +PASS_SSH() { + sshpass -p "$SSH_PASSWORD" ssh \ + -o StrictHostKeyChecking=no \ + -o ConnectTimeout=10 \ + -o ServerAliveInterval=15 \ + -o ServerAliveCountMax=3 \ + "$@" +} + +# ══════════════════════════════════════════════════════════════════════════════ +# CONNECTIVITY + AUTH BOOTSTRAP +# ══════════════════════════════════════════════════════════════════════════════ +echo "🔍 Testing connectivity to $REMOTE_HOST..." + +if KEY_SSH "root@$REMOTE_HOST" exit 2>/dev/null; then + echo "✅ Key-based auth succeeded" + SSH_CONNECT() { KEY_SSH "root@$REMOTE_HOST" "$@"; } +else + echo "⚠️ Key auth failed — attempting password auth..." + if ! PASS_SSH "root@$REMOTE_HOST" exit 2>/dev/null; then + echo "❌ Cannot connect to $REMOTE_HOST — both auth methods failed" + exit 1 + fi + + echo "✅ Password auth succeeded" + SSH_CONNECT() { PASS_SSH "root@$REMOTE_HOST" "$@"; } + + echo "🔑 Installing SSH public key for future runs..." + sshpass -p "$SSH_PASSWORD" ssh-copy-id \ + -o StrictHostKeyChecking=no \ + -i ~/.ssh/id_ed25519 \ + "root@$REMOTE_HOST" && \ + echo "✅ Key installed — password auth won't be needed next run" || \ + echo "⚠️ ssh-copy-id failed — continuing with password auth" +fi + +# ══════════════════════════════════════════════════════════════════════════════ +# CAPTURE PRIVATE KEY FOR REMOTE INJECTION +# ══════════════════════════════════════════════════════════════════════════════ +PRIVATE_KEY_CONTENTS=$(cat ~/.ssh/id_ed25519) + +# ══════════════════════════════════════════════════════════════════════════════ +# REMOTE SESSION +# ══════════════════════════════════════════════════════════════════════════════ +echo "🚀 Starting remote session on $REMOTE_HOST..." + +SSH_CONNECT bash << EOF +set -euo pipefail + +COMPOSE_DIR="$COMPOSE_DIR" +MOUNT_POINT="$MOUNT_POINT" +MOUNT_REMOTE="$MOUNT_REMOTE" +RESTIC_REPO="$RESTIC_REPO" +MODE="$MODE" +export RESTIC_PASSWORD="$RESTIC_PASSWORD" +export RESTIC_REPOSITORY="\$RESTIC_REPO" + +log() { echo " \$1"; } +step() { echo ""; echo "▶ \$1"; } + +has_compose() { + [ -f "\$1/docker-compose.yml" ] || [ -f "\$1/compose.yml" ] +} + +find_compose_dir() { + if has_compose "\$COMPOSE_DIR"; then + echo "\$COMPOSE_DIR" + elif has_compose "/home/zeshan/docker"; then + echo "/home/zeshan/docker" + else + echo "" + fi +} + +# ── 1. Install Dependencies ─────────────────────────────────────────────────── +step "Installing dependencies" + +log "📦 Updating package lists..." +apt-get update -qq + +log "📦 Installing packages..." +apt-get install -y --no-install-recommends \ + curl \ + wget \ + ca-certificates \ + bash \ + coreutils \ + procps \ + openssh-server \ + sshfs \ + restic \ + fuse3 +log "✅ Packages installed" + +# ── 2. Docker ───────────────────────────────────────────────────────────────── +step "Docker" +if ! command -v docker &>/dev/null; then + log "🐋 Installing Docker..." + curl -fsSL https://get.docker.com | sh + systemctl enable --now docker + log "✅ Docker installed" +else + log "✅ Docker already installed (\$(docker --version))" +fi + +# ── 3. Migrate legacy zeshan paths ─────────────────────────────────────────── +step "Path migration" +if [ -d "/home/zeshan/docker" ] && [ ! -d "/root/docker" ]; then + log "📦 Migrating /home/zeshan/docker → /root/docker..." + cp -r /home/zeshan/docker /root/docker + log "✅ Migration complete" +elif [ -d "/root/docker" ]; then + log "✅ /root/docker already exists" +else + log "⚠️ No compose directory found yet" +fi + +# ── 4. FUSE ─────────────────────────────────────────────────────────────────── +step "FUSE config" +grep -q "^user_allow_other" /etc/fuse.conf 2>/dev/null || \ + echo "user_allow_other" >> /etc/fuse.conf +log "✅ FUSE configured" + +# ── 5. Storage Mount ────────────────────────────────────────────────────────── +step "Storage mount" +if mountpoint -q "\$MOUNT_POINT"; then + log "⚠️ Already mounted — unmounting first..." + umount -l "\$MOUNT_POINT" +fi +mkdir -p "\$MOUNT_POINT" + +MOUNT_KEY="\$(mktemp /root/.ssh/mount_key.XXXXXX)" +chmod 600 "\$MOUNT_KEY" +cat > "\$MOUNT_KEY" << 'PRIVKEY' +$PRIVATE_KEY_CONTENTS +PRIVKEY +chmod 600 "\$MOUNT_KEY" +trap 'rm -f \$MOUNT_KEY' EXIT + +log "🔗 Mounting \$MOUNT_REMOTE..." +sshfs \ + -o StrictHostKeyChecking=no \ + -o IdentityFile="\$MOUNT_KEY" \ + -o allow_other \ + -o reconnect \ + -o ServerAliveInterval=15 \ + -o ServerAliveCountMax=3 \ + "\$MOUNT_REMOTE" "\$MOUNT_POINT" + +rm -f "\$MOUNT_KEY" + +if ! mountpoint -q "\$MOUNT_POINT"; then + echo "❌ Mount failed!" + exit 1 +fi +log "✅ \$MOUNT_POINT mounted from \$MOUNT_REMOTE" +# ── 6. Persist mount in fstab ───────────────────────────────────────────────── +step "Persisting mount in fstab" + +PERSISTENT_KEY="/root/.ssh/sshfs_mount_key" +cat > "\$PERSISTENT_KEY" << 'PRIVKEY' +$PRIVATE_KEY_CONTENTS +PRIVKEY +chmod 600 "\$PERSISTENT_KEY" + +if grep -q "n.h-y.st:/mnt/data" /etc/fstab; then + log "✅ fstab entry already exists — skipping" +else + echo "root@n.h-y.st:/mnt/data /mnt/data fuse.sshfs IdentityFile=/root/.ssh/sshfs_mount_key,StrictHostKeyChecking=no,allow_other,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3,_netdev,x-systemd.automount 0 0" >> /etc/fstab + log "✅ fstab entry added" +fi + +grep "n.h-y.st" /etc/fstab +# ── 6. Restic Repo ──────────────────────────────────────────────────────────── +step "Restic repository" +if ! restic snapshots &>/dev/null; then + log "📦 Initialising new restic repository..." + restic init + log "✅ Repository initialised" +else + log "✅ Repository already exists" + restic snapshots --compact +fi + +# ── 7. Backup or Restore ────────────────────────────────────────────────────── +step "Task: \$MODE" + +if [ "\$MODE" == "RESTORE" ]; then + + log "📋 Available snapshots:" + restic snapshots + + log "⚠️ Restoring in 5 seconds — Ctrl+C to abort..." + sleep 5 + + log "⏬ Restoring latest snapshot..." + mkdir -p /root/docker /var/lib/docker/volumes + restic restore latest --target / + + if [ -d "/home/zeshan/docker" ] && [ ! -d "/root/docker" ]; then + log "📦 Moving restored zeshan paths to /root/docker..." + cp -r /home/zeshan/docker /root/docker + fi + + log "✅ Restore complete" + + ACTIVE_COMPOSE="\$(find_compose_dir)" + if [ -n "\$ACTIVE_COMPOSE" ]; then + log "🐳 Starting Docker services from \$ACTIVE_COMPOSE..." + cd "\$ACTIVE_COMPOSE" && docker compose up -d + log "✅ Services started" + docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" + else + log "⚠️ No compose file found — skipping docker compose up" + fi + +else # BACKUP + + ACTIVE_COMPOSE="\$(find_compose_dir)" + + if [ -n "\$ACTIVE_COMPOSE" ]; then + log "⏸️ Stopping services for consistent backup..." + cd "\$ACTIVE_COMPOSE" && docker compose stop + else + log "⚠️ No compose file found — skipping stop" + fi + + log "💾 Running backup..." + BACKUP_PATHS="/var/lib/docker/volumes" + [ -d "/root/docker" ] && BACKUP_PATHS="\$BACKUP_PATHS /root/docker" + [ -d "/home/zeshan/docker" ] && BACKUP_PATHS="\$BACKUP_PATHS /home/zeshan/docker" + + restic backup \ + --tag automated \ + --tag "\$(date +%Y-%m-%d)" \ + --exclude="*.log" \ + --exclude="*.tmp" \ + --exclude="*.cache" \ + \$BACKUP_PATHS + + log "✂️ Pruning old snapshots..." + restic forget \ + --tag automated \ + --keep-daily 7 \ + --keep-weekly 4 \ + --keep-monthly 3 \ + --prune + + log "🔍 Verifying repository integrity..." + restic check --read-data-subset=5% + + if [ -n "\$ACTIVE_COMPOSE" ]; then + log "▶️ Restarting services..." + cd "\$ACTIVE_COMPOSE" && docker compose start + log "✅ Services restarted" + docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" + fi + +fi + +# ── 8. Cleanup ──────────────────────────────────────────────────────────────── +step "Cleanup" +umount "\$MOUNT_POINT" && log "✅ \$MOUNT_POINT unmounted" + +echo " +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + ✅ \$MODE completed successfully +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +" +EOF + +SCRIPT + +RUN chmod +x /app/run.sh +ENTRYPOINT ["/app/run.sh"] \ No newline at end of file diff --git a/netcup/compose.yml b/netcup/compose.yml new file mode 100644 index 0000000..0f68669 --- /dev/null +++ b/netcup/compose.yml @@ -0,0 +1,124 @@ +services: + + cvsite: + image: r.h-y.st/zeshan:latest + container_name: zeshan + restart: always + networks: + - hurricane + + vw: + image: vaultwarden/server:latest + container_name: vaultwarden + restart: unless-stopped + environment: + DOMAIN: "https://vault.ztariq.com" + ADMIN_TOKEN: '$$argon2id$$v=19$$m=65540,t=3,p=4$$iFEc/H/Tg6oBMTNkeToGeA4ThFMOEudDjpgLg0uz53A$$jFTr/G3MH5hwLwfvrEzZGHWYek9TUs57SXGX1YHpdkY' + volumes: + - ./data/vaultwarden:/data + networks: + - hurricane + + caddy: + image: caddy:latest + container_name: caddy + restart: unless-stopped + ports: + - "80:80" + - "443:443" + - "443:443/udp" + volumes: + - ./data/caddy/etc:/etc/caddy + - ./data/caddy/data:/data + - ./data/caddy/config:/config + networks: + - hurricane + + plex: + image: lscr.io/linuxserver/plex:latest + container_name: plex + restart: unless-stopped + environment: + - PUID=1000 + - PGID=1000 + - TZ=Europe/London + - VERSION=docker + volumes: + - ./data/plex:/config + - /mnt/data/media:/media + network_mode: host + + jellyfin: + image: jellyfin/jellyfin:latest + container_name: jellyfin + restart: unless-stopped + environment: + - TZ=Europe/London + volumes: + - ./data/jellyfin/config:/config + - ./data/jellyfin/cache:/cache + - /mnt/data/media:/media + network_mode: host + + db: + image: postgres:latest + container_name: nextcloud-db + restart: unless-stopped + environment: + POSTGRES_DB: nextcloud + POSTGRES_USER: nextcloud + POSTGRES_PASSWORD: Shan33779488 + volumes: + - ./data/postgres:/var/lib/postgresql + networks: + - hurricane + + redis: + image: redis:alpine + container_name: redis + restart: unless-stopped + volumes: + - ./data/redis:/data + networks: + - hurricane + + nextcloud: + image: nextcloud:latest + container_name: nextcloud + restart: unless-stopped + environment: + POSTGRES_HOST: db + POSTGRES_DB: nextcloud + POSTGRES_USER: nextcloud + POSTGRES_PASSWORD: Shan33779488 + REDIS_HOST: redis + TRUSTED_PROXIES: 172.0.0/8,10.0.0/8,192.168.0/16 + OVERWRITEHOST: next.ztariq.com + OVERWRITEPROTOCOL: https + OVERWRITECLIURL: https://next.ztariq.com + volumes: + - ./data/nextcloud:/var/www/html + networks: + - hurricane + depends_on: + - db + - redis + + nextcloud-cron: + image: nextcloud:latest + container_name: nextcloud-cron + restart: unless-stopped + environment: + POSTGRES_HOST: db + volumes: + - ./data/nextcloud:/var/www/html + entrypoint: /cron.sh + networks: + - hurricane + depends_on: + - db + - redis + +networks: + hurricane: + external: true diff --git a/netcup/usage.sh b/netcup/usage.sh new file mode 100644 index 0000000..6a0200b --- /dev/null +++ b/netcup/usage.sh @@ -0,0 +1,24 @@ +# .env — never commit this to git +KEY_PASSWORD=your-key-password +REMOTE_HOST=192.168.1.86 +SSH_PASSWORD=your-root-ssh-password +RESTIC_PASSWORD=your-restic-password +MODE=BACKUP + +# Optional +# MOUNT_REMOTE=root@n.h-y.st:/mnt/data + + +docker build -t ztariq129/hurricane:restore . + +# Build +docker build -t ztariq129/hurricane:restore . + +# Backup +docker run --rm --env-file .env ztariq129/hurricane:restore + +# Restore +docker run --rm --env-file .env -e MODE=RESTORE ztariq129/hurricane:restore + +# Debug +docker run --rm -it --env-file .env --entrypoint bash ztariq129/hurricane:restore \ No newline at end of file diff --git a/sbox.sh b/sbox.sh new file mode 100644 index 0000000..0a66f8e --- /dev/null +++ b/sbox.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +# Define your Hetzner Storage Box details +STORAGE_BOX_USER="u554364" +STORAGE_BOX_HOST="u554364.your-storagebox.de" +MOUNT_POINT="/mnt/data" +SSH_KEY_PATH="/root/.ssh/id_ed25519" +PORT="23" + +# Install required dependencies +echo "Installing required dependencies..." +apt update +apt install -y sshfs fuse3 + +# Ensure FUSE is loaded +echo "Loading FUSE kernel module..." +sudo modprobe fuse + +# Ensure fuse.conf allows user mounts +echo "Configuring fuse.conf..." +echo "user_allow_other" | sudo tee -a /etc/fuse.conf + +# Create a systemd mount unit file +echo "Creating systemd mount unit..." +cat < + + + + Zeshan Tariq – Azure DevOps · SRE · SOC · Kubernetes Engineer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ Zeshan Tariq – Azure DevOps, SRE, SOC & Kubernetes Engineer +

+ +
+ +
+
+ Zeshan Tariq · DevOps · SRE · SOC +
+
+ + Available for remote contract & permanent roles +
+
+ + +
+
+ +
+
+ Profile: SOC / SRE / DevOps / DevSecOps / Kubernetes +
+
+ + +
+
+ Who are you and what do you do? +
+
U
+
+ + +
+
+ +
+
+

Zeshan Tariq

+ SOC · SRE · DevOps · DevSecOps · Kubernetes +

+ I’m a cloud & platform engineer focused on Azure, + Kubernetes, and secure automation — + combining SOC practices with SRE principles + to keep systems reliable and secure. +

+
+
Azure · AKS
+
Kubernetes · Docker
+
Terraform · CI/CD
+
Sentinel · SOC
+
+
+
+ + +
+
+ Where can I see your full experience and roles? +
+
U
+
+ + +
+ + +
+
+ In practical terms, what kind of work do you do? +
+
U
+
+ + +
+
+ +
+
+ I design and operate Azure & AKS platforms, automate + infrastructure with Terraform/Bicep, build + CI/CD pipelines, and use SOC tooling + and SRE metrics to keep services secure and reliable. +
+
+ + +
+
+ Show me a small code sample that represents how you think. +
+
U
+
+ + +
+
+ +
+
+ A condensed TypeScript-style example that reflects what I do with Azure, AKS, + and translating requirements into platform configuration: +
import { AzureKubernetesServices } from '@azure/kubernetes-engine';
+import { Engineer, Experience } from '@professional/core';
+
+export class AzureKubernetesEngineer implements Engineer {
+  constructor(private azureServices: AzureKubernetesServices) {}
+
+  experience: Experience = {
+    years: 8,
+    sectors: ['government', 'consultancy', 'finance'],
+    specialties: [
+      'application development',
+      'configuration management',
+      'public cloud deployment',
+    ],
+  };
+
+  deploySolution(solution: any) {
+    return this.azureServices.deploy({
+      solution,
+      orchestration: 'Kubernetes',
+      cloud: 'Azure',
+    });
+  }
+
+  bridgeBusinessAndTechnology(requirements: any) {
+    return this.azureServices.configure(requirements);
+  }
+}
+
+
+ + +
+
+ How do I contact you about a role? +
+
U
+
+ + +
+
+ +
+
+ The simplest way is email — the site and CV give extra context if you need it. + +
+
+
+
+ +
+ © Zeshan Tariq + CV +
+
+ + + + diff --git a/zeshancv/zt1125.docx b/zeshancv/zt1125.docx new file mode 100644 index 0000000000000000000000000000000000000000..3cfed45047c6dd17ab0b6385575425979ae915cf GIT binary patch literal 33872 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�rr@_!VW&;2PP5eSrDFX$!rpPeS!qCXe{`9id2 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 literal 0 HcmV?d00001