20260522
This commit is contained in:
parent
af70a6a354
commit
ba82ec5dff
@ -1,8 +1,53 @@
|
||||
---
|
||||
|
||||
- hosts: mts_serv
|
||||
- hosts: hip
|
||||
gather_facts: yes # ВАЖНО: собираем факты о системе
|
||||
become: yes
|
||||
tasks:
|
||||
- name: Install base utils
|
||||
apt: name=mc,atop,htop,iotop,mtr-tiny,iperf,iperf3,dnsutils,tcpdump,iftop,byobu,git,nload,bmon state=latest update_cache=yes
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 1. Добавление репозитория Zabbix
|
||||
- name: Добавление репозитория Zabbix
|
||||
shell: |
|
||||
wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_7.0-1+debian{{ ansible_distribution_major_version }}_all.deb
|
||||
dpkg -i zabbix-release_7.0-1+debian{{ ansible_distribution_major_version }}_all.deb
|
||||
apt update
|
||||
args:
|
||||
warn: no
|
||||
when: ansible_distribution == "Debian"
|
||||
|
||||
- name: Добавление репозитория Zabbix для Ubuntu
|
||||
shell: |
|
||||
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu{{ ansible_distribution_major_version }}_all.deb
|
||||
dpkg -i zabbix-release_7.0-1+ubuntu{{ ansible_distribution_major_version }}_all.deb
|
||||
apt update
|
||||
args:
|
||||
warn: no
|
||||
when: ansible_distribution == "Ubuntu"
|
||||
|
||||
# 2. Установка Zabbix Agent 2
|
||||
- name: Установка Zabbix Agent 2
|
||||
apt:
|
||||
name: zabbix-agent2
|
||||
state: present
|
||||
update_cache: yes
|
||||
|
||||
# 3. Настройка конфигурации (добавление сети 11.200.0.0/24)
|
||||
- name: Добавление доверенной сети в конфиг
|
||||
lineinfile:
|
||||
path: /etc/zabbix/zabbix_agent2.conf
|
||||
regexp: "^Server="
|
||||
line: "Server=127.0.0.1,11.200.0.0/24"
|
||||
|
||||
# 4. Запуск сервиса
|
||||
- name: Запуск Zabbix Agent 2
|
||||
systemd:
|
||||
name: zabbix-agent2
|
||||
state: restarted
|
||||
enabled: yes
|
||||
|
||||
@ -1,9 +1,15 @@
|
||||
---
|
||||
|
||||
- hosts: ztv
|
||||
- hosts: hip
|
||||
#become: yes
|
||||
tasks:
|
||||
|
||||
- name: Install Docker SDK for Python via apt
|
||||
ansible.builtin.apt:
|
||||
name: python3-docker
|
||||
state: present
|
||||
become: yes
|
||||
|
||||
- name: Create a network with custom IPAM config
|
||||
community.docker.docker_network:
|
||||
name: overlay_net
|
||||
|
||||
@ -9,9 +9,10 @@ all_servers:
|
||||
docker_overlay_net_subnet: 11.100.0.0/24
|
||||
docker_overlay_net_gateway: 11.100.0.254
|
||||
docker_overlay_net_iprange: 11.100.0.128/25
|
||||
ztv:
|
||||
hip:
|
||||
hosts:
|
||||
ztv.rgk.fm
|
||||
#france# 83.171.226.120
|
||||
93.177.116.129
|
||||
vars:
|
||||
ansible_user: pycm1k
|
||||
docker_overlay_net_subnet: 11.101.0.0/24
|
||||
|
||||
32
MY/install_docker.yaml
Normal file
32
MY/install_docker.yaml
Normal file
@ -0,0 +1,32 @@
|
||||
- name: Install Docker and Compose using official script (recommended)
|
||||
hosts: hip
|
||||
become: true
|
||||
|
||||
tasks:
|
||||
- name: Download and run Docker installation script
|
||||
ansible.builtin.shell: |
|
||||
curl -fsSL https://get.docker.com -o /tmp/get-docker.sh
|
||||
sh /tmp/get-docker.sh
|
||||
args:
|
||||
creates: /usr/bin/docker
|
||||
register: install_result
|
||||
|
||||
- name: Show installation output
|
||||
ansible.builtin.debug:
|
||||
msg: "{{ install_result.stdout_lines }}"
|
||||
|
||||
- name: Add current user to docker group
|
||||
ansible.builtin.user:
|
||||
name: "{{ ansible_user }}"
|
||||
groups: docker
|
||||
append: true
|
||||
when: ansible_user != 'root'
|
||||
|
||||
- name: Verify Docker Compose V2 installation
|
||||
ansible.builtin.command: docker compose version
|
||||
register: compose_version
|
||||
changed_when: false
|
||||
|
||||
- name: Show Compose version
|
||||
ansible.builtin.debug:
|
||||
msg: "Docker Compose: {{ compose_version.stdout }}"
|
||||
96
MY/nft_config.yaml
Normal file
96
MY/nft_config.yaml
Normal file
@ -0,0 +1,96 @@
|
||||
---
|
||||
- name: Настройка nftables с белым списком портов и VIP адресами
|
||||
hosts: hip
|
||||
become: yes
|
||||
gather_facts: yes
|
||||
|
||||
vars:
|
||||
# VIP адреса (полный доступ)
|
||||
vip_addresses:
|
||||
- "192.168.1.100"
|
||||
- "10.10.10.50"
|
||||
- "172.16.0.10"
|
||||
|
||||
# Белый список TCP портов
|
||||
white_list_tcp_ports:
|
||||
- 35130 # SSH
|
||||
- 80 # HTTP
|
||||
- 443 # HTTPS
|
||||
- 5432 # PostgreSQL
|
||||
- 8080 # Jenkins/Proxy
|
||||
- 8443 # Alternative HTTPS
|
||||
|
||||
# Белый список UDP портов
|
||||
white_list_udp_ports:
|
||||
- 53 # DNS
|
||||
- 123 # NTP
|
||||
- 1194 # OpenVPN
|
||||
|
||||
# Дополнительные настройки
|
||||
enable_ip_forwarding: true
|
||||
nftables_log_prefix_input: "[nftables-input] Dropped: "
|
||||
nftables_log_prefix_forward: "[nftables-forward] Blocked non-whitelist port: "
|
||||
|
||||
tasks:
|
||||
- name: Установка nftables
|
||||
apt:
|
||||
name: nftables
|
||||
state: present
|
||||
update_cache: yes
|
||||
|
||||
- name: Создание директории для шаблонов (если не существует)
|
||||
file:
|
||||
path: /etc/nftables
|
||||
state: directory
|
||||
mode: '0755'
|
||||
|
||||
- name: Копирование конфигурации nftables из шаблона
|
||||
template:
|
||||
src: templates/nft/nftables.conf.j2
|
||||
dest: /etc/nftables.conf
|
||||
mode: '0644'
|
||||
backup: yes
|
||||
notify: restart nftables
|
||||
|
||||
- name: Включение IP forwarding (если нужно)
|
||||
sysctl:
|
||||
name: "{{ item }}"
|
||||
value: '1'
|
||||
sysctl_set: yes
|
||||
state: present
|
||||
reload: yes
|
||||
loop:
|
||||
- net.ipv4.ip_forward
|
||||
- net.ipv6.conf.all.forwarding
|
||||
when: enable_ip_forwarding
|
||||
|
||||
- name: Убеждаемся что nftables запущен и включен
|
||||
systemd:
|
||||
name: nftables
|
||||
state: started
|
||||
enabled: yes
|
||||
|
||||
- name: Проверка синтаксиса конфигурации
|
||||
command: nft -c -f /etc/nftables.conf
|
||||
register: nft_check
|
||||
changed_when: false
|
||||
|
||||
- name: Вывод результата проверки
|
||||
debug:
|
||||
msg: "✅ Конфигурация nftables валидна"
|
||||
when: nft_check.rc == 0
|
||||
|
||||
- name: Применение правил (если не были применены при старте)
|
||||
command: nft -f /etc/nftables.conf
|
||||
when: nft_check.rc == 0
|
||||
notify: restart nftables
|
||||
|
||||
handlers:
|
||||
- name: restart nftables
|
||||
systemd:
|
||||
name: nftables
|
||||
state: restarted
|
||||
|
||||
- name: validate nftables
|
||||
command: nft -c -f /etc/nftables.conf
|
||||
listen: "restart nftables"
|
||||
71
MY/templates/nft/nftables.conf.j2
Normal file
71
MY/templates/nft/nftables.conf.j2
Normal file
@ -0,0 +1,71 @@
|
||||
#!/usr/sbin/nft -f
|
||||
|
||||
# ========== ПЕРЕМЕННЫЕ ==========
|
||||
define VIP_ADDRESSES = {
|
||||
{% for vip in vip_addresses %}
|
||||
{{ vip }}{% if not loop.last %},{% endif %}
|
||||
{% endfor %}
|
||||
}
|
||||
|
||||
define WHITE_LIST_PORTS = {
|
||||
{% for port in white_list_tcp_ports %}
|
||||
{{ port }}{% if not loop.last %},{% endif %}
|
||||
{% endfor %}
|
||||
}
|
||||
|
||||
define WHITE_LIST_PORTS_UDP = {
|
||||
{% for port in white_list_udp_ports %}
|
||||
{{ port }}{% if not loop.last %},{% endif %}
|
||||
{% endfor %}
|
||||
}
|
||||
|
||||
flush ruleset
|
||||
|
||||
table inet my-firewall {
|
||||
# ========== ЦЕПОЧКА ДЛЯ ВХОДЯЩИХ ПАКЕТОВ (INPUT) ==========
|
||||
chain input {
|
||||
type filter hook input priority -10; policy drop;
|
||||
|
||||
# Разрешаем уже установленные соединения
|
||||
ct state established,related accept
|
||||
|
||||
# Разрешаем loopback
|
||||
iifname "lo" accept
|
||||
|
||||
# Разрешаем ping
|
||||
icmp type echo-request accept
|
||||
|
||||
# --- VIP-адреса (полный доступ на INPUT) ---
|
||||
ip saddr $VIP_ADDRESSES accept
|
||||
|
||||
# --- Белый список портов для всех остальных на INPUT ---
|
||||
tcp dport $WHITE_LIST_PORTS accept
|
||||
udp dport $WHITE_LIST_PORTS_UDP accept
|
||||
|
||||
# Логируем и дропаем всё остальное
|
||||
log prefix "{{ nftables_log_prefix_input }}" counter drop
|
||||
}
|
||||
|
||||
# ========== ЦЕПОЧКА ДЛЯ МАРШРУТИЗАЦИИ (FORWARD) ==========
|
||||
chain forward {
|
||||
type filter hook forward priority -10; policy drop;
|
||||
|
||||
# Разрешаем уже установленные соединения
|
||||
ct state established,related accept
|
||||
|
||||
# --- VIP-адреса (полный доступ ко всем контейнерам) ---
|
||||
ip saddr $VIP_ADDRESSES accept
|
||||
|
||||
# --- Белый список портов для всех остальных ---
|
||||
tcp dport $WHITE_LIST_PORTS accept
|
||||
udp dport $WHITE_LIST_PORTS_UDP accept
|
||||
|
||||
# ВСЁ остальное блокируем
|
||||
log prefix "{{ nftables_log_prefix_forward }}" counter drop
|
||||
}
|
||||
|
||||
# ========== ЦЕПОЧКА ДЛЯ ИСХОДЯЩИХ ПАКЕТОВ (OUTPUT) ==========
|
||||
chain output {
|
||||
type filter hook output priority -10; policy accept;
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user