04.08.25
This commit is contained in:
17
backup_docker_volumes.yml
Normal file
17
backup_docker_volumes.yml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
- name: Backup Docker volumes from remote server
|
||||||
|
hosts: all
|
||||||
|
# become: yes
|
||||||
|
tasks:
|
||||||
|
- name: Ensure local backup directory exists
|
||||||
|
local_action: file
|
||||||
|
path=./backups
|
||||||
|
state=directory
|
||||||
|
mode=0755
|
||||||
|
|
||||||
|
- name: Synchronize /var/lib/docker/volumes to local ./backups
|
||||||
|
synchronize:
|
||||||
|
src: /var/lib/docker/volumes
|
||||||
|
dest: ./backups/
|
||||||
|
mode: pull
|
||||||
|
delete: no
|
||||||
103
docker-compose.yml
Normal file
103
docker-compose.yml
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
# docker‑compose.yml (версия 3.8 – поддерживает named volumes и сетевые настройки)
|
||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
synapse:
|
||||||
|
image: matrixdotorg/synapse:latest
|
||||||
|
container_name: matrix_synapse
|
||||||
|
environment:
|
||||||
|
- SYNAPSE_SERVER_NAME=matrix.emsdata.ru
|
||||||
|
- SYNAPSE_REPORT_STATS=no
|
||||||
|
- TZ=Asia/Vladivostok
|
||||||
|
ports:
|
||||||
|
- "8008:8008" # HTTP (без TLS), используемый 뒤 federation/client API
|
||||||
|
- "8448:8448" # блок federation HTTPS (если понадобилось позже)
|
||||||
|
volumes:
|
||||||
|
- synapse_data:/data
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
drawio:
|
||||||
|
image: jgraph/drawio:latest
|
||||||
|
container_name: drawio
|
||||||
|
ports:
|
||||||
|
- "8080:8080" # Draw.io в браузере: http://host:8080
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
static-nginx:
|
||||||
|
image: nginx:alpine
|
||||||
|
container_name: nginx_static
|
||||||
|
ports:
|
||||||
|
- "8081:8081" # простой статический nginx без монтирования – откроется дефолтный index
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
npm-app:
|
||||||
|
image: 'jc21/nginx-proxy-manager:latest'
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
# These ports are in format <host-port>:<container-port>
|
||||||
|
- '80:80' # Public HTTP Port
|
||||||
|
- '443:443' # Public HTTPS Port
|
||||||
|
- '81:81' # Admin Web Port
|
||||||
|
# Add any other Stream port you want to expose
|
||||||
|
# - '21:21' # FTP
|
||||||
|
environment:
|
||||||
|
# Mysql/Maria connection parameters:
|
||||||
|
DB_MYSQL_HOST: "db"
|
||||||
|
DB_MYSQL_PORT: 3306
|
||||||
|
DB_MYSQL_USER: "npm"
|
||||||
|
DB_MYSQL_PASSWORD: "npm"
|
||||||
|
DB_MYSQL_NAME: "npm"
|
||||||
|
# Uncomment this if IPv6 is not enabled on your host
|
||||||
|
# DISABLE_IPV6: 'true'
|
||||||
|
volumes:
|
||||||
|
- ./npm_data:/data
|
||||||
|
- ./npm_letsencrypt:/etc/letsencrypt
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: 'jc21/mariadb-aria:latest'
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: 'npm'
|
||||||
|
MYSQL_DATABASE: 'npm'
|
||||||
|
MYSQL_USER: 'npm'
|
||||||
|
MYSQL_PASSWORD: 'npm'
|
||||||
|
MARIADB_AUTO_UPGRADE: '1'
|
||||||
|
volumes:
|
||||||
|
- ./mysql:/var/lib/mysql
|
||||||
|
|
||||||
|
gitea:
|
||||||
|
image: gitea/gitea:latest
|
||||||
|
container_name: gitea
|
||||||
|
environment:
|
||||||
|
- USER_UID=1000
|
||||||
|
- USER_GID=1000
|
||||||
|
volumes:
|
||||||
|
- ./gitea/data:/data
|
||||||
|
ports:
|
||||||
|
- "3000:3000"
|
||||||
|
- "2222:22"
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
wireguard:
|
||||||
|
image: lscr.io/linuxserver/wireguard:latest
|
||||||
|
container_name: wireguard_vpn
|
||||||
|
cap_add:
|
||||||
|
- NET_ADMIN
|
||||||
|
- SYS_MODULE
|
||||||
|
sysctls:
|
||||||
|
- net.ipv4.conf.all.src_valid_mark=1
|
||||||
|
ports:
|
||||||
|
- "51820:51820/udp"
|
||||||
|
volumes:
|
||||||
|
- wireguard_data:/config
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
synapse_data:
|
||||||
|
npm_data:
|
||||||
|
npm_letsencrypt:
|
||||||
|
wireguard_data:
|
||||||
|
nginx-site:
|
||||||
|
mysql:
|
||||||
79
first/docker-compose.yml
Normal file
79
first/docker-compose.yml
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# docker‑compose.yml (версия 3.8 – поддерживает named volumes и сетевые настройки)
|
||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
synapse:
|
||||||
|
image: matrixdotorg/synapse:latest
|
||||||
|
container_name: matrix_synapse
|
||||||
|
environment:
|
||||||
|
- SYNAPSE_SERVER_NAME=matrix.emsdata.ru
|
||||||
|
- SYNAPSE_REPORT_STATS=no
|
||||||
|
- TZ=Asia/Vladivostok
|
||||||
|
ports:
|
||||||
|
- "8008:8008" # HTTP (без TLS), используемый 뒤 federation/client API
|
||||||
|
- "8448:8448" # блок federation HTTPS (если понадобилось позже)
|
||||||
|
volumes:
|
||||||
|
- synapse_data:/data
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
drawio:
|
||||||
|
image: jgraph/drawio:latest
|
||||||
|
container_name: drawio
|
||||||
|
ports:
|
||||||
|
- "8080:8080" # Draw.io в браузере: http://host:8080
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
static-nginx:
|
||||||
|
image: nginx:alpine
|
||||||
|
container_name: nginx_static
|
||||||
|
ports:
|
||||||
|
- "8081:8081" # простой статический nginx без монтирования – откроется дефолтный index
|
||||||
|
volumes:
|
||||||
|
- ./nginx-site:/usr/share/nginx/html:ro
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
npm-app:
|
||||||
|
image: jc21/nginx-proxy-manager:latest
|
||||||
|
container_name: nginx_proxy_manager
|
||||||
|
ports:
|
||||||
|
- "81:81" # админка (login: admin@example.com / password: changeme)
|
||||||
|
- "80:80" # http proxy
|
||||||
|
- "443:443" # https proxy
|
||||||
|
volumes:
|
||||||
|
- npm_data:/data
|
||||||
|
- npm_letsencrypt:/etc/letsencrypt
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
gitea:
|
||||||
|
image: gitea/gitea:latest
|
||||||
|
container_name: gitea
|
||||||
|
environment:
|
||||||
|
- USER_UID=1000
|
||||||
|
- USER_GID=1000
|
||||||
|
volumes:
|
||||||
|
- ./gitea/data:/data
|
||||||
|
ports:
|
||||||
|
- "3000:3000"
|
||||||
|
- "2222:22"
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
wireguard:
|
||||||
|
image: lscr.io/linuxserver/wireguard:latest
|
||||||
|
container_name: wireguard_vpn
|
||||||
|
cap_add:
|
||||||
|
- NET_ADMIN
|
||||||
|
- SYS_MODULE
|
||||||
|
sysctls:
|
||||||
|
- net.ipv4.conf.all.src_valid_mark=1
|
||||||
|
ports:
|
||||||
|
- "51820:51820/udp"
|
||||||
|
volumes:
|
||||||
|
- wireguard_data:/config
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
synapse_data:
|
||||||
|
npm_data:
|
||||||
|
npm_letsencrypt:
|
||||||
|
wireguard_data:
|
||||||
|
nginx-site:
|
||||||
40
first_deploy_compose.yml
Normal file
40
first_deploy_compose.yml
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
- name: Deploy docker-compose stack
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
|
||||||
|
vars:
|
||||||
|
compose_dir: /opt/docker
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Ensure compose directory exists
|
||||||
|
file:
|
||||||
|
path: "{{ compose_dir }}"
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: Copy docker-compose.yml
|
||||||
|
copy:
|
||||||
|
src: first/docker-compose.yml
|
||||||
|
dest: "{{ compose_dir }}/docker-compose.yml"
|
||||||
|
|
||||||
|
# - name: Copy config.json for Element
|
||||||
|
# copy:
|
||||||
|
# src: files/config.json
|
||||||
|
# dest: "{{ compose_dir }}/element/config.json"
|
||||||
|
# owner: "{{ ansible_user }}"
|
||||||
|
# group: "{{ ansible_user }}"
|
||||||
|
# mode: '0644'
|
||||||
|
# when: ansible_facts['os_family'] == "Debian"
|
||||||
|
- name: Pull package
|
||||||
|
command: docker compose pull
|
||||||
|
args:
|
||||||
|
chdir: "{{ compose_dir }}"
|
||||||
|
|
||||||
|
- name: Generate synapse
|
||||||
|
command: docker compose run --rm synapse generate
|
||||||
|
args:
|
||||||
|
chdir: "{{ compose_dir }}"
|
||||||
|
|
||||||
|
- name: Launch docker-compose
|
||||||
|
command: docker compose up -d
|
||||||
|
args:
|
||||||
|
chdir: "{{ compose_dir }}"
|
||||||
79
global/docker-compose.yml
Normal file
79
global/docker-compose.yml
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# docker‑compose.yml (версия 3.8 – поддерживает named volumes и сетевые настройки)
|
||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
synapse:
|
||||||
|
image: matrixdotorg/synapse:latest
|
||||||
|
container_name: matrix_synapse
|
||||||
|
environment:
|
||||||
|
- SYNAPSE_SERVER_NAME=matrix.emsdata.ru
|
||||||
|
- SYNAPSE_REPORT_STATS=no
|
||||||
|
- TZ=Asia/Vladivostok
|
||||||
|
ports:
|
||||||
|
- "8008:8008" # HTTP (без TLS), используемый 뒤 federation/client API
|
||||||
|
- "8448:8448" # блок federation HTTPS (если понадобилось позже)
|
||||||
|
volumes:
|
||||||
|
- synapse_data:/data
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
drawio:
|
||||||
|
image: jgraph/drawio:latest
|
||||||
|
container_name: drawio
|
||||||
|
ports:
|
||||||
|
- "8080:8080" # Draw.io в браузере: http://host:8080
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
static-nginx:
|
||||||
|
image: nginx:alpine
|
||||||
|
container_name: nginx_static
|
||||||
|
ports:
|
||||||
|
- "8081:8081" # простой статический nginx без монтирования – откроется дефолтный index
|
||||||
|
volumes:
|
||||||
|
- ./nginx-site:/usr/share/nginx/html:ro
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
npm-app:
|
||||||
|
image: jc21/nginx-proxy-manager:latest
|
||||||
|
container_name: nginx_proxy_manager
|
||||||
|
ports:
|
||||||
|
- "81:81" # админка (login: admin@example.com / password: changeme)
|
||||||
|
- "80:80" # http proxy
|
||||||
|
- "443:443" # https proxy
|
||||||
|
volumes:
|
||||||
|
- npm_data:/data
|
||||||
|
- npm_letsencrypt:/etc/letsencrypt
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
gitea:
|
||||||
|
image: gitea/gitea:latest
|
||||||
|
container_name: gitea
|
||||||
|
environment:
|
||||||
|
- USER_UID=1000
|
||||||
|
- USER_GID=1000
|
||||||
|
volumes:
|
||||||
|
- ./gitea/data:/data
|
||||||
|
ports:
|
||||||
|
- "3000:3000"
|
||||||
|
- "2222:22"
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
wireguard:
|
||||||
|
image: lscr.io/linuxserver/wireguard:latest
|
||||||
|
container_name: wireguard_vpn
|
||||||
|
cap_add:
|
||||||
|
- NET_ADMIN
|
||||||
|
- SYS_MODULE
|
||||||
|
sysctls:
|
||||||
|
- net.ipv4.conf.all.src_valid_mark=1
|
||||||
|
ports:
|
||||||
|
- "51820:51820/udp"
|
||||||
|
volumes:
|
||||||
|
- wireguard_data:/config
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
synapse_data:
|
||||||
|
npm_data:
|
||||||
|
npm_letsencrypt:
|
||||||
|
wireguard_data:
|
||||||
|
nginx-site:
|
||||||
BIN
global/synapse/_data/homeserver.db
Normal file
BIN
global/synapse/_data/homeserver.db
Normal file
Binary file not shown.
BIN
global/synapse/_data/homeserver.db-shm
Normal file
BIN
global/synapse/_data/homeserver.db-shm
Normal file
Binary file not shown.
0
global/synapse/_data/homeserver.db-wal
Normal file
0
global/synapse/_data/homeserver.db-wal
Normal file
35
global/synapse/_data/homeserver.yaml
Normal file
35
global/synapse/_data/homeserver.yaml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# Configuration file for Synapse.
|
||||||
|
#
|
||||||
|
# This is a YAML file: see [1] for a quick introduction. Note in particular
|
||||||
|
# that *indentation is important*: all the elements of a list or dictionary
|
||||||
|
# should have the same indentation.
|
||||||
|
#
|
||||||
|
# [1] https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html
|
||||||
|
#
|
||||||
|
# For more information on how to configure Synapse, including a complete accounting of
|
||||||
|
# each option, go to docs/usage/configuration/config_documentation.md or
|
||||||
|
# https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html
|
||||||
|
server_name: "matrix.emsdata.ru"
|
||||||
|
pid_file: /data/homeserver.pid
|
||||||
|
listeners:
|
||||||
|
- port: 8008
|
||||||
|
tls: false
|
||||||
|
type: http
|
||||||
|
x_forwarded: true
|
||||||
|
resources:
|
||||||
|
- names: [client, federation]
|
||||||
|
compress: false
|
||||||
|
database:
|
||||||
|
name: sqlite3
|
||||||
|
args:
|
||||||
|
database: /data/homeserver.db
|
||||||
|
log_config: "/data/matrix.local.log.config"
|
||||||
|
media_store_path: /mnt/media_store
|
||||||
|
registration_shared_secret: "CKXLZlHyBol:m0.;ZTt2xo8kP8Sx=n2vlz3yAkD94.=I~WUyyO"
|
||||||
|
report_stats: true
|
||||||
|
macaroon_secret_key: "8Re-vQZ4jDF7J3CzWk7:REH7F-B&T7BaJCAQ+tOLvPYXNCm+LE"
|
||||||
|
form_secret: "VIl0~Qhicl_O.HTDG07-ffEB+Vh&wS=3+F81@n8krCvl-FCGhq"
|
||||||
|
signing_key_path: "/data/matrix.local.signing.key"
|
||||||
|
trusted_key_servers:
|
||||||
|
- server_name: "matrix.org"
|
||||||
|
|
||||||
39
global/synapse/_data/matrix.local.log.config
Normal file
39
global/synapse/_data/matrix.local.log.config
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
version: 1
|
||||||
|
|
||||||
|
formatters:
|
||||||
|
precise:
|
||||||
|
|
||||||
|
format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s'
|
||||||
|
|
||||||
|
|
||||||
|
handlers:
|
||||||
|
|
||||||
|
|
||||||
|
console:
|
||||||
|
class: logging.StreamHandler
|
||||||
|
formatter: precise
|
||||||
|
|
||||||
|
loggers:
|
||||||
|
# This is just here so we can leave `loggers` in the config regardless of whether
|
||||||
|
# we configure other loggers below (avoid empty yaml dict error).
|
||||||
|
_placeholder:
|
||||||
|
level: "INFO"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
synapse.storage.SQL:
|
||||||
|
# beware: increasing this to DEBUG will make synapse log sensitive
|
||||||
|
# information such as access tokens.
|
||||||
|
level: INFO
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
root:
|
||||||
|
level: INFO
|
||||||
|
|
||||||
|
|
||||||
|
handlers: [console]
|
||||||
|
|
||||||
|
|
||||||
|
disable_existing_loggers: false
|
||||||
2
global/synapse/_data/matrix.local.signing.key
Normal file
2
global/synapse/_data/matrix.local.signing.key
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
ed25519 a_OpCO qscj9MgiLTtRQIy2bmXYgTPGSMBfWisbrz1mqfFJ4uI
|
||||||
|
|
||||||
21
install-docker-compose-and-ufw-playbook.yaml
Normal file
21
install-docker-compose-and-ufw-playbook.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
#- hosts: all
|
||||||
|
# remote_user: Student121
|
||||||
|
# become: yes
|
||||||
|
# tasks:
|
||||||
|
# - name: Copy file with owner and permissions
|
||||||
|
# ansible.builtin.copy:
|
||||||
|
# src: /home/ivan/git/homework2
|
||||||
|
# dest: /home/student121
|
||||||
|
# owner: student121
|
||||||
|
# group: student121
|
||||||
|
# mode: "0644"
|
||||||
|
|
||||||
|
- name: Setup server with Docker and firewall
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- docker
|
||||||
|
- firewall
|
||||||
|
- fail2ban
|
||||||
|
- rsync
|
||||||
2
inventory.ini
Normal file
2
inventory.ini
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
[servers]
|
||||||
|
myserver ansible_host=192.168.1.208 ansible_user=ivan
|
||||||
26
roles/docker/tasks/main.yml
Normal file
26
roles/docker/tasks/main.yml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
- name: Install required packages
|
||||||
|
apt:
|
||||||
|
name: [ "apt-transport-https", "ca-certificates", "curl", "software-properties-common" ]
|
||||||
|
update_cache: true
|
||||||
|
|
||||||
|
- name: Add Docker GPG key
|
||||||
|
apt_key:
|
||||||
|
url: https://download.docker.com/linux/ubuntu/gpg
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Add Docker repository
|
||||||
|
apt_repository:
|
||||||
|
repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable
|
||||||
|
|
||||||
|
- name: Install Docker
|
||||||
|
apt:
|
||||||
|
name: [ "docker-ce", "docker-compose" ]
|
||||||
|
state: latest
|
||||||
|
update_cache: true
|
||||||
|
|
||||||
|
- name: Enable Docker service
|
||||||
|
systemd:
|
||||||
|
name: docker
|
||||||
|
enabled: true
|
||||||
|
state: started
|
||||||
|
|
||||||
9
roles/fail2ban/defaults/main.yml
Normal file
9
roles/fail2ban/defaults/main.yml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
fail2ban_sshd_enabled: true
|
||||||
|
fail2ban_nginx_enabled: true
|
||||||
|
|
||||||
|
fail2ban_sshd_maxretry: 5
|
||||||
|
fail2ban_sshd_bantime: 3600
|
||||||
|
|
||||||
|
fail2ban_nginx_maxretry: 5
|
||||||
|
fail2ban_nginx_bantime: 3600
|
||||||
|
|
||||||
5
roles/fail2ban/handlers/main.yml
Normal file
5
roles/fail2ban/handlers/main.yml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
- name: Restart fail2ban
|
||||||
|
service:
|
||||||
|
name: fail2ban
|
||||||
|
state: restarted
|
||||||
|
|
||||||
26
roles/fail2ban/tasks/main.yml
Normal file
26
roles/fail2ban/tasks/main.yml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
- name: Install fail2ban
|
||||||
|
apt:
|
||||||
|
name: fail2ban
|
||||||
|
state: present
|
||||||
|
update_cache: true
|
||||||
|
|
||||||
|
- name: Configure jail.local
|
||||||
|
template:
|
||||||
|
src: jail.local.j2
|
||||||
|
dest: /etc/fail2ban/jail.local
|
||||||
|
mode: 0644
|
||||||
|
notify: Restart fail2ban
|
||||||
|
|
||||||
|
- name: Configure nginx filter
|
||||||
|
template:
|
||||||
|
src: nginx.conf.j2
|
||||||
|
dest: /etc/fail2ban/filter.d/nginx-http-auth.conf
|
||||||
|
mode: 0644
|
||||||
|
when: fail2ban_nginx_enabled
|
||||||
|
|
||||||
|
- name: Ensure fail2ban is running
|
||||||
|
service:
|
||||||
|
name: fail2ban
|
||||||
|
state: started
|
||||||
|
enabled: true
|
||||||
|
|
||||||
14
roles/fail2ban/templates/jail.local.j2
Normal file
14
roles/fail2ban/templates/jail.local.j2
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
[sshd]
|
||||||
|
enabled = {{ 'true' if fail2ban_sshd_enabled else 'false' }}
|
||||||
|
port = ssh
|
||||||
|
logpath = %(sshd_log)s
|
||||||
|
maxretry = {{ fail2ban_sshd_maxretry }}
|
||||||
|
bantime = {{ fail2ban_sshd_bantime }}
|
||||||
|
|
||||||
|
[nginx-http-auth]
|
||||||
|
enabled = {{ 'true' if fail2ban_nginx_enabled else 'false' }}
|
||||||
|
port = http,https
|
||||||
|
logpath = /var/log/nginx/error.log
|
||||||
|
maxretry = {{ fail2ban_nginx_maxretry }}
|
||||||
|
bantime = {{ fail2ban_nginx_bantime }}
|
||||||
|
|
||||||
4
roles/fail2ban/templates/nginx.conf.j2
Normal file
4
roles/fail2ban/templates/nginx.conf.j2
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[Definition]
|
||||||
|
failregex = no user/password was provided for basic authentication.*client: <HOST>
|
||||||
|
ignoreregex =
|
||||||
|
|
||||||
23
roles/firewall/tasks/main.yml
Normal file
23
roles/firewall/tasks/main.yml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
- name: Install ufw
|
||||||
|
apt:
|
||||||
|
name: ufw
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Allow SSH
|
||||||
|
ufw:
|
||||||
|
rule: allow
|
||||||
|
port: 22
|
||||||
|
|
||||||
|
- name: Allow HTTP/HTTPS
|
||||||
|
ufw:
|
||||||
|
rule: allow
|
||||||
|
port: "{{ item }}"
|
||||||
|
loop:
|
||||||
|
- 80
|
||||||
|
- 443
|
||||||
|
|
||||||
|
- name: Deny all others
|
||||||
|
ufw:
|
||||||
|
state: enabled
|
||||||
|
policy: deny
|
||||||
|
|
||||||
3
roles/rsync/defaults/main.yml
Normal file
3
roles/rsync/defaults/main.yml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
rsync_packages:
|
||||||
|
- rsync
|
||||||
|
|
||||||
6
roles/rsync/tasks/main.yml
Normal file
6
roles/rsync/tasks/main.yml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
- name: Install rsync
|
||||||
|
apt:
|
||||||
|
name: "{{ rsync_packages }}"
|
||||||
|
state: present
|
||||||
|
update_cache: true
|
||||||
|
|
||||||
Reference in New Issue
Block a user