From 9043dfbe5f894d1eacd97efd842e024d33aeee65 Mon Sep 17 00:00:00 2001 From: mrwho Date: Mon, 11 May 2026 18:57:10 +0300 Subject: [PATCH] fixes --- ansible.cfg | 15 + inventory/prod/group_vars/all/vars.yml | 1 + inventory/prod/hosts.yml | 22 +- playbooks/rocky9.yml | 10 +- requirements.yml | 10 + roles/rocky9/tasks/ip_bridge.yml | 21 ++ roles/rocky9/tasks/ip_forward.yml | 59 ++++ roles/rocky9/tasks/ip_spoofing.yml | 17 + roles/rocky9/tasks/kernel_tune.yml | 95 ++++++ roles/rocky9/tasks/main.yml | 15 +- roles/rocky9/tasks/set_nic_names_eth.yml | 56 +++- roles/rocky9/tasks/sysctl_tuning.yml | 398 ++--------------------- roles/rocky9/tasks/tcp_tune.yml | 239 ++++++++++++++ roles/root-cert/tasks/main.yml | 6 +- 14 files changed, 558 insertions(+), 406 deletions(-) create mode 100644 ansible.cfg create mode 100644 requirements.yml create mode 100644 roles/rocky9/tasks/ip_bridge.yml create mode 100644 roles/rocky9/tasks/ip_forward.yml create mode 100644 roles/rocky9/tasks/ip_spoofing.yml create mode 100644 roles/rocky9/tasks/kernel_tune.yml create mode 100644 roles/rocky9/tasks/tcp_tune.yml diff --git a/ansible.cfg b/ansible.cfg new file mode 100644 index 0000000..31d1ee4 --- /dev/null +++ b/ansible.cfg @@ -0,0 +1,15 @@ +[defaults] +roles_path = roles +collections_paths = collections +filter_plugins = filter_plugins +retry_files_enabled = False +interpreter_python = auto_silent +host_key_checking = False +result_format = yaml +stdout_callback = default +callback_result_format = yaml +deprecation_warnings = False + +[ssh_connection] +ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null +pipelining = True diff --git a/inventory/prod/group_vars/all/vars.yml b/inventory/prod/group_vars/all/vars.yml index 82daccc..423c786 100644 --- a/inventory/prod/group_vars/all/vars.yml +++ b/inventory/prod/group_vars/all/vars.yml @@ -4,6 +4,7 @@ # ANSIBLE_SSH_USER — remote user # ANSIBLE_SSHKEY_ID_RSA — private SSH key (записывается в ~/.ssh/id_rsa в before_script) # ANSIBLE_BECOME_PASS — sudo password +ignored_interfaces: lo ansible_user: "{{ lookup('env', 'ANSIBLE_SSH_USER') | mandatory }}" ansible_become: true ansible_become_method: sudo diff --git a/inventory/prod/hosts.yml b/inventory/prod/hosts.yml index 0e85524..c37bbc2 100644 --- a/inventory/prod/hosts.yml +++ b/inventory/prod/hosts.yml @@ -3,11 +3,17 @@ all: children: centos: hosts: - router: - ansible_host: 172.20.21.100 - git: - ansible_host: 172.20.21.105 - vm01: - ansible_host: 80.211.195.127 - vm02: - ansible_host: 212.60.5.162 +# router: +# ansible_host: 172.20.21.100 +# git: +# ansible_host: 172.20.21.105 +# vm01: +# ansible_host: 80.211.195.127 +# vm02: +# ansible_host: 212.60.5.162 + ca: + ansible_host: 192.168.99.20 + kuber-ctl: + ansible_host: 192.168.99.41 + kuber-node01: + ansible_host: 192.168.99.42 diff --git a/playbooks/rocky9.yml b/playbooks/rocky9.yml index d1b6115..bbcf188 100644 --- a/playbooks/rocky9.yml +++ b/playbooks/rocky9.yml @@ -1,14 +1,16 @@ --- - name: Initial Rocky9 Configuration - hosts: rocky9-template + hosts: + - ca + # kuber-node01 # - 172.20.21.193 become: true vars: - ansible_ssh_user: root - ansible_ssh_password: nmklop90 + #ansible_ssh_user: root + #ansible_ssh_password: nmklop90 reboot_system: false - hostname: rocky9-template.local.mrwho.ru + #hostname: rocky9-template.local.mrwho.ru roles: - rocky9 - root-cert diff --git a/requirements.yml b/requirements.yml new file mode 100644 index 0000000..9d8296a --- /dev/null +++ b/requirements.yml @@ -0,0 +1,10 @@ +--- +collections: + - name: ansible.posix + version: ">=1.5.0" + - name: ansible.utils + version: ">=2.0.0,<5.0.0" + - name: community.general + version: ">=8.0.0" + - name: community.vmware + version: ">=4.0.0" diff --git a/roles/rocky9/tasks/ip_bridge.yml b/roles/rocky9/tasks/ip_bridge.yml new file mode 100644 index 0000000..d6c312c --- /dev/null +++ b/roles/rocky9/tasks/ip_bridge.yml @@ -0,0 +1,21 @@ +--- +# Отключение фильтрации на br интерфейсах. необходимо в некоторых случаях, +# когда NAT не правильно отрабатывает по таким интерфейсам +- name: net.bridge.bridge-nf-call-ip6tables + ansible.posix.sysctl: + name: net.bridge.bridge-nf-call-ip6tables + value: 0 + state: present + sysctl_file: /etc/sysctl.d/ip_bridge.conf +- name: net.bridge.bridge-nf-call-iptables + ansible.posix.sysctl: + name: net.bridge.bridge-nf-call-iptables + value: 0 + state: present + sysctl_file: /etc/sysctl.d/ip_bridge.conf +- name: net.bridge.bridge-nf-call-arptables + ansible.posix.sysctl: + name: net.bridge.bridge-nf-call-arptables + value: 0 + state: present + sysctl_file: /etc/sysctl.d/ip_bridge.conf diff --git a/roles/rocky9/tasks/ip_forward.yml b/roles/rocky9/tasks/ip_forward.yml new file mode 100644 index 0000000..b52af66 --- /dev/null +++ b/roles/rocky9/tasks/ip_forward.yml @@ -0,0 +1,59 @@ +--- +# Запрет на передачу пакетов через сервер (т.е. работу его как шлюза) +- name: net.ipv4.ip_forward + ansible.posix.sysctl: + name: net.ipv4.ip_forward + value: 0 + state: present + sysctl_file: /etc/sysctl.d/ip_forward.conf + +# Запрет на маршрутизацию на основе соответствующей опции в пакете (безопасность) +- name: net.ipv4.conf.default.accept_source_route + ansible.posix.sysctl: + name: net.ipv4.conf.default.accept_source_route + value: 0 + state: present + sysctl_file: /etc/sysctl.d/ip_forward.conf + +# Если в таблице маршрутизации есть маршрут на сеть, с которой пришёл пакет (src ip) +# и он ссылается на данный интерфейс, то такой пакет будет принят. +# остальные будут отброшены. +- name: net.ipv4.conf.default.rp_filter + ansible.posix.sysctl: + name: net.ipv4.conf.default.rp_filter + value: 1 + state: present + sysctl_file: /etc/sysctl.d/ip_forward.conf +- name: net.ipv4.conf.all.rp_filter + ansible.posix.sysctl: + name: net.ipv4.conf.all.rp_filter + value: 1 + state: present + sysctl_file: /etc/sysctl.d/ip_forward.conf +- name: net.ipv4.conf.lo.rp_filter + ansible.posix.sysctl: + name: net.ipv4.conf.lo.rp_filter + value: 1 + state: present + sysctl_file: /etc/sysctl.d/ip_forward.conf +- name: net.ipv4.conf.all.send_redirects + ansible.posix.sysctl: + name: net.ipv4.conf.all.send_redirects + value: 0 + state: present + sysctl_file: /etc/sysctl.d/ip_forward.conf + +#- name: net.ipv4.conf.default.send_redirects +# ansible.posix.sysctl: +# name: net.ipv4.conf.default.send_redirects +# value: 0 +# state: present +# reload: true +# sysctl_file: /etc/sysctl.d/ip_forward.conf + +- name: net.ipv4.conf.all.accept_redirects + ansible.posix.sysctl: + name: net.ipv4.conf.all.accept_redirects + value: 0 + state: present + sysctl_file: /etc/sysctl.d/ip_forward.conf diff --git a/roles/rocky9/tasks/ip_spoofing.yml b/roles/rocky9/tasks/ip_spoofing.yml new file mode 100644 index 0000000..757ab8b --- /dev/null +++ b/roles/rocky9/tasks/ip_spoofing.yml @@ -0,0 +1,17 @@ +--- +# Активируем защиту от IP-спуфинга. +- ansible.posix.sysctl: + name: net.ipv4.conf.default.rp_filter + value: 1 + state: present + sysctl_file: /etc/sysctl.d/ip_spoofing.conf +- ansible.posix.sysctl: + name: net.ipv4.conf.all.rp_filter + value: 1 + state: present + sysctl_file: /etc/sysctl.d/ip_spoofing.conf +- ansible.posix.sysctl: + name: net.ipv4.conf.lo.rp_filter + value: 1 + state: present + sysctl_file: /etc/sysctl.d/ip_spoofing.conf diff --git a/roles/rocky9/tasks/kernel_tune.yml b/roles/rocky9/tasks/kernel_tune.yml new file mode 100644 index 0000000..60cf6fe --- /dev/null +++ b/roles/rocky9/tasks/kernel_tune.yml @@ -0,0 +1,95 @@ +--- +# Remove kernel.panic entry from /etc/sysctl.conf +- name: kernel.panic + ansible.posix.sysctl: + name: kernel.panic + state: absent + sysctl_file: /etc/sysctl.conf +# Отключаем отслеживание ядром нажатие специальных сочетаний клавиш +- name: kernel.sysrq + ansible.posix.sysctl: + name: kernel.sysrq + value: 0 + state: present + sysctl_file: /etc/sysctl.d/kernel_tune.conf + +# Добавление к файлу дампа ядра PID процесса +- name: kernel.core_uses_pid + ansible.posix.sysctl: + name: kernel.core_uses_pid + value: 1 + state: present + sysctl_file: /etc/sysctl.d/kernel_tune.conf +# Здесь указывается максимальное количество байт в одном сообщении при передачи их между процессами +- name: kernel.msgmnb + ansible.posix.sysctl: + name: kernel.msgmnb + value: 65536 + state: present + sysctl_file: /etc/sysctl.d/kernel_tune.conf +# Здесь определяется максимальный размер сообщения, которое может быть отправлено от одного процесса другому. +- name: kernel.msgmax + ansible.posix.sysctl: + name: kernel.msgmax + value: 65536 + state: present + sysctl_file: /etc/sysctl.d/kernel_tune.conf + +# Максимальный размер (в байтах) на сегменте shared memory. +- name: kernel.shmmax + ansible.posix.sysctl: + name: kernel.shmmax + value: 68719476736 + state: present + sysctl_file: /etc/sysctl.d/kernel_tune.conf +# Общее количество разделяемой памяти (в страницах), какое все процессы на сервере могут использовать. +- name: kernel.shmall + ansible.posix.sysctl: + name: kernel.shmall + value: 4294967296 + state: present + sysctl_file: /etc/sysctl.d/kernel_tune.conf + +# Лимит одновременно открытых файлов в системе +- name: fs.file-max + ansible.posix.sysctl: + name: fs.file-max + value: 1000000 + state: present + sysctl_file: /etc/sysctl.d/kernel_tune.conf + +# Максимальный размер буфера приема данных для всех соединений. +- name: net.core.rmem_max + ansible.posix.sysctl: + name: net.core.rmem_max + value: 33554432 + state: present + sysctl_file: /etc/sysctl.d/kernel_tune.conf +# Максимальный размер буфера передачи данных для всех соединений. +- name: net.core.wmem_max + ansible.posix.sysctl: + name: net.core.wmem_max + value: 33554432 + state: present + sysctl_file: /etc/sysctl.d/kernel_tune.conf +# Размер буфера приема данных по умолчанию для всех соединений. +- name: net.core.rmem_default + ansible.posix.sysctl: + name: net.core.rmem_default + value: 8388608 + state: present + sysctl_file: /etc/sysctl.d/kernel_tune.conf +# Размер буфера передачи данных по умолчанию для всех соединений. +- name: net.core.wmem_default + ansible.posix.sysctl: + name: net.core.wmem_default + value: 4194394 + state: present + sysctl_file: /etc/sysctl.d/kernel_tune.conf +# Максимальный размер буфера приема данных для всех соединений. +- name: net.core.optmem_max + ansible.posix.sysctl: + name: net.core.optmem_max + value: 40960 + state: present + sysctl_file: /etc/sysctl.d/kernel_tune.conf diff --git a/roles/rocky9/tasks/main.yml b/roles/rocky9/tasks/main.yml index 2379b2b..ba9b652 100644 --- a/roles/rocky9/tasks/main.yml +++ b/roles/rocky9/tasks/main.yml @@ -2,8 +2,9 @@ - name: Set a hostname ansible.builtin.hostname: name: "{{ hostname }}" + when: hostname is defined -- name: Set Prompt +- name: Set Prompt coloring ansible.builtin.template: src: prompt.sh.j2 dest: /etc/profile.d/prompt.sh @@ -11,9 +12,9 @@ group: root mode: "0644" -# - name: Create users -# ansible.builtin.include_tasks: -# file: create_users.yml +- name: Create users + ansible.builtin.include_tasks: + file: create_users.yml - name: Syctl tuning ansible.builtin.include_tasks: @@ -23,9 +24,9 @@ # ansible.builtin.include_tasks: # file: set_network_nic.yml -- name: Setup NIC to eth0 - ansible.builtin.include_tasks: - file: set_nic_names_eth.yml +# - name: Setup NIC to eth0 +# ansible.builtin.include_tasks: +# file: set_nic_names_eth.yml - name: Install packages ansible.builtin.include_tasks: diff --git a/roles/rocky9/tasks/set_nic_names_eth.yml b/roles/rocky9/tasks/set_nic_names_eth.yml index e796579..98149a0 100644 --- a/roles/rocky9/tasks/set_nic_names_eth.yml +++ b/roles/rocky9/tasks/set_nic_names_eth.yml @@ -1,4 +1,10 @@ --- +- name: Ensure jmespath is installed on the control node + delegate_to: localhost + become: false + ansible.builtin.pip: + name: jmespath + - name: Формируем отсортированный список физических интерфейсов ansible.builtin.set_fact: # Сортировка гарантирует порядок: первый в списке станет eth0 @@ -8,9 +14,13 @@ ansible.builtin.set_fact: first_iface: "{{ physical_interfaces[0] }}" current_ip: "{{ hostvars[inventory_hostname]['ansible_' + physical_interfaces[0].replace('-', '_')]['ipv4']['address'] }}" - current_mask: "{{ hostvars[inventory_hostname]['ansible_' + physical_interfaces[0].replace('-', '_')]['ipv4']['netmask'] }}" + current_mask: "{{ hostvars[inventory_hostname]['ansible_' + physical_interfaces[0].replace('-', '_')]['ipv4']['prefix'] }}" current_gw: "{{ ansible_default_ipv4.gateway | default(omit) }}" +- name: Debug interface facts + ansible.builtin.debug: + var: hostvars[inventory_hostname]['ansible_' + physical_interfaces[0].replace('-', '_')]['ipv4'] + - name: Настройка eth0 с сохранением текущего IP community.general.nmcli: conn_name: eth0 @@ -22,16 +32,26 @@ state: present autoconnect: true +#- name: Настройка остальных интерфейсов (eth1, eth2...) +# community.general.nmcli: +# conn_name: eth{{ item.0 + 1 }} +# ifname: eth{{ item.0 + 1 }} +# type: ethernet +# mac: "{{ ansible_facts[item.1]['macaddress'] }}" +# state: present +# autoconnect: true + # Пропускаем первый (индекс 0), так как настроили его выше +# loop: "{{ physical_interfaces[1:] | enumerate }}" - name: Настройка остальных интерфейсов (eth1, eth2...) community.general.nmcli: - conn_name: eth{{ item.0 + 1 }} - ifname: eth{{ item.0 + 1 }} + conn_name: "eth{{ item.0 + 1 }}" + ifname: "eth{{ item.0 + 1 }}" type: ethernet mac: "{{ ansible_facts[item.1]['macaddress'] }}" state: present autoconnect: true - # Пропускаем первый (индекс 0), так как настроили его выше - loop: "{{ physical_interfaces[1:] | enumerate }}" + # Используем срез [1:] и специальный луп для индексации + with_indexed_items: "{{ physical_interfaces[1:] }}" - name: Применение настроек (поднятие eth0) ansible.builtin.shell: nmcli device connect eth0 # noqa: command-instead-of-shell ignore-errors @@ -41,9 +61,12 @@ changed_when: true - name: Применение настроек для остальных интерфейсов - ansible.builtin.shell: nmcli device connect eth{{ item.0 + 1 }} # noqa: command-instead-of-shell ignore-errors - loop: "{{ physical_interfaces[1:] | enumerate }}" - ignore_errors: true # noqa: ignore-errors + ansible.builtin.shell: "nmcli device connect eth{{ item.0 + 1 }}" + # item.0 — это индекс (0, 1, 2...) + # item.1 — это имя интерфейса из списка + loop: "{{ physical_interfaces[1:] }}" +# with_indexed_items: "{{ physical_interfaces[1:] }}" + ignore_errors: true changed_when: false - name: Перезапуск NetworkManager для чистоты @@ -52,3 +75,20 @@ state: restarted async: 30 poll: 0 + +- name: Create /etc/systemd/network dir + ansible.builtin.file: + path: /etc/systemd/network + state: directory + owner: root + group: root + mode: "0755" + +- name: Rename NIC to eth0 + ansible.builtin.template: + src: 70-eth0.link.j2 + dest: /etc/systemd/network/70-eth{{ item }}.link + owner: root + group: root + mode: "0644" + loop: "{{ physical_interfaces[0:] }}" \ No newline at end of file diff --git a/roles/rocky9/tasks/sysctl_tuning.yml b/roles/rocky9/tasks/sysctl_tuning.yml index 5dae293..5dc35ab 100644 --- a/roles/rocky9/tasks/sysctl_tuning.yml +++ b/roles/rocky9/tasks/sysctl_tuning.yml @@ -1,414 +1,60 @@ --- -# Remove kernel.panic entry from /etc/sysctl.conf -- ansible.posix.sysctl: - name: kernel.panic - state: absent - sysctl_file: /etc/sysctl.conf -# Отключаем отслеживание ядром нажатие специальных сочетаний клавиш -- ansible.posix.sysctl: - name: kernel.sysrq - value: 0 - state: present - sysctl_file: /etc/sysctl.d/kernel_tune.conf +- name: Kernel Tuning + ansible.builtin.include_tasks: kernel_tune.yml -# Добавление к файлу дампа ядра PID процесса -- ansible.posix.sysctl: - name: kernel.core_uses_pid - value: 1 - state: present - sysctl_file: /etc/sysctl.d/kernel_tune.conf -# Здесь указывается максимальное количество байт в одном сообщении при передачи их между процессами -- ansible.posix.sysctl: - name: kernel.msgmnb - value: 65536 - state: present - sysctl_file: /etc/sysctl.d/kernel_tune.conf -# Здесь определяется максимальный размер сообщения, которое может быть отправлено от одного процесса другому. -- ansible.posix.sysctl: - name: kernel.msgmax - value: 65536 - state: present - sysctl_file: /etc/sysctl.d/kernel_tune.conf +- name: TCP/UDP Tuning + ansible.builtin.include_tasks: tcp_tune.yml -# Максимальный размер (в байтах) на сегменте shared memory. -- ansible.posix.sysctl: - name: kernel.shmmax - value: 68719476736 - state: present - sysctl_file: /etc/sysctl.d/kernel_tune.conf -# Общее количество разделяемой памяти (в страницах), какое все процессы на сервере могут использовать. -- ansible.posix.sysctl: - name: kernel.shmall - value: 4294967296 - state: present - sysctl_file: /etc/sysctl.d/kernel_tune.conf +- name: IP ip_spoofing + ansible.builtin.include_tasks: ip_spoofing.yml -# Лимит одновременно открытых файлов в системе -- ansible.posix.sysctl: - name: fs.file-max - value: 1000000 - state: present - sysctl_file: /etc/sysctl.d/kernel_tune.conf +- name: IP Forwarding + ansible.builtin.include_tasks: ip_forward.yml -# Максимальный размер буфера приема данных для всех соединений. -- ansible.posix.sysctl: - name: net.core.rmem_max - value: 33554432 - state: present - sysctl_file: /etc/sysctl.d/kernel_tune.conf -# Максимальный размер буфера передачи данных для всех соединений. -- ansible.posix.sysctl: - name: net.core.wmem_max - value: 33554432 - state: present - sysctl_file: /etc/sysctl.d/kernel_tune.conf -# Размер буфера приема данных по умолчанию для всех соединений. -- ansible.posix.sysctl: - name: net.core.rmem_default - value: 8388608 - state: present - sysctl_file: /etc/sysctl.d/kernel_tune.conf -# Размер буфера передачи данных по умолчанию для всех соединений. -- ansible.posix.sysctl: - name: net.core.wmem_default - value: 4194394 - state: present - sysctl_file: /etc/sysctl.d/kernel_tune.conf -# Максимальный размер буфера приема данных для всех соединений. -- ansible.posix.sysctl: - name: net.core.optmem_max - value: 40960 - state: present - sysctl_file: /etc/sysctl.d/kernel_tune.conf +- name: IP Bridge + ansible.builtin.include_tasks: ip_bridge.yml -# - name: Deploy kernel_tune.conf +# - name: Deploy kernel_tune.conf # ansible.builtin.template: # src: kernel_tune.conf.j2 # dest: /etc/sysctl.d/kernel_tune.conf # mode: "0644" - -#- name: Deploy tcp_tune.conf +# - name: Deploy tcp_tune.conf # ansible.builtin.template: # src: tcp_tune.conf.j2 # dest: /etc/sysctl.d/tcp_tune.conf # mode: "0644" - -# TCP syncookies - технология, позволяющая не забивать -# TCP стек, пока TCP сессия полностью не установится. -# Защита на случай TCP Syn атак -# Согласно рекомендациям разработчиков ядра, этот режим лучше отключить. -# http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt -- ansible.posix.sysctl: - name: net.ipv4.tcp_syncookies - value: 0 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf - -# Векторная (минимум, по умолчанию, максимум) переменная в файле tcp_rmem содержит 3 целых числа, определяющих размер буфера сокетов TCP/UDP. -# Минимум: каждый сокет TCP имеет право использовать эту память по факту своего создания. Возможность использования такого буфера гарантируется -# даже при достижении порога ограничения (moderate memory pressure). Размер минимального буфера по умолчанию составляет 8 Кбайт (8192). -# Значение по умолчанию: количество памяти, допустимое для буфера передачи сокета TCP по умолчанию. Это значение применяется взамен параметра -# /proc/sys/net/core/rmem_default, используемого другими протоколами. Значение используемого по умолчанию буфера обычно (по умолчанию) -# составляет 87830 байт. Это определяет размер окна 65535 с заданным по умолчанию значением tcp_adv_win_scale и tcp_app_win = 0, несколько -# меньший, нежели определяет принятое по умолчанию значение tcp_app_win. -# Максимум: максимальный размер буфера, который может быть автоматически выделен для приема сокету TCP. Это значение не отменяет максимума, -# заданного в файле /proc/sys/net/core/rmem_max. При “статическом” выделении памяти с помощью SO_RCVBUF этот параметр не имеет значения. -# На приём TCP пакетов -- ansible.posix.sysctl: - name: net.ipv4.tcp_rmem - value: 4096 8388608 16777216 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf# На передачу TCP пакетов -- ansible.posix.sysctl: - name: net.ipv4.tcp_wmem - value: 4096 4194394 16777216 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Для TCP протокола в целом -- ansible.posix.sysctl: - name: net.ipv4.tcp_mem - value: 8388608 12582912 16777216 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Для UDP протокола в целом -- ansible.posix.sysctl: - name: net.ipv4.udp_mem - value: 8388608 12582912 16777216 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -- ansible.posix.sysctl: - name: net.ipv4.udp_rmem_min - value: 16384 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -- ansible.posix.sysctl: - name: net.ipv4.udp_wmem_min - value: 16384 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Параметр определяет максимальное количество пакетов в очереди на обработку, если интерфейс получает пакеты быстрее, чем ядро может их обработать. -- ansible.posix.sysctl: - name: net.core.netdev_max_backlog - value: 500000 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Максимальное число запоминаемых запросов на соединение (TCP Syn), для которых не было получено подтверждения от подключающегося клиента. -- ansible.posix.sysctl: - name: net.ipv4.tcp_max_syn_backlog - value: 5480000 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Увеличим возможное количество сокетов в состоянии TIME_WAIT. -- ansible.posix.sysctl: - name: net.ipv4.tcp_max_tw_buckets - value: 5480000 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Разрешаем повторное использование TIME-WAIT сокетов в случаях, если протокол считает это безопасным. -- ansible.posix.sysctl: - name: net.ipv4.tcp_tw_reuse - value: 1 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Разрешаем быструю утилизацию сокетов находящихся в состоянии TIME_WAIT -- ansible.posix.sysctl: - name: net.ipv4.tcp_tw_recycle - value: 1 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Параметр tcp_fin_timeout определяет время сохранения сокета в состоянии FIN-WAIT-2 после его закрытия локальной стороной. -# Партнер может не закрыть это соединение никогда. -- ansible.posix.sysctl: - name: net.ipv4.tcp_fin_timeout - value: 3 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Разрешить выборочные подтверждения протокола TCP. Опция необходима для эффективного использования всей доступной -# пропускной способности некоторых сетей -- ansible.posix.sysctl: - name: net.ipv4.tcp_sack - value: 1 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Число попыток повтора передачи пакетов SYNACK для пассивных соединений TCP. -- ansible.posix.sysctl: - name: net.ipv4.tcp_synack_retries - value: 1 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Определяет максимальное число допустимых в системе сокетов TCP, не связанных каким-либо идентификатором пользовательского файла (user file handle). -- ansible.posix.sysctl: - name: net.ipv4.tcp_max_orphans - value: 65536 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Определяется число неудачных попыток, после которого уничтожается соединение TCP, закрытое на локальной стороне. -- ansible.posix.sysctl: - name: net.ipv4.tcp_orphan_retries - value: 0 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Проверка наличия подключения по средствам keepalive сообщений. Активируется только для тех сокетов, которые были созданы с флагом SO_KEEPALIVE. -# Через какой промежуток времени после установки подключения начать слать keepalive сообщения (в сек) -- ansible.posix.sysctl: - name: net.ipv4.tcp_keepalive_time - value: 600 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Интервал, с которым слать keepalive пакеты (в сек) -- ansible.posix.sysctl: - name: net.ipv4.tcp_keepalive_intvl - value: 20 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# После скольки неудачных пробах считать соединение разорванным -- ansible.posix.sysctl: - name: net.ipv4.tcp_keepalive_probes - value: 2 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Запрещаем технологию slow start (малый размер окна) в TCP подключениях, -# в которых долгое время не было трафика. -- ansible.posix.sysctl: - name: net.ipv4.tcp_slow_start_after_idle - value: 0 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Увеличиваем диапазон локальных портов, доступных для установки исходящих подключений. -- ansible.posix.sysctl: - name: net.ipv4.ip_local_port_range - value: 2000 65000 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Разрешает временные метки протокола TCP. Их наличие позволяет управлять работой протокола в условиях серьезных нагрузок. -- ansible.posix.sysctl: - name: net.ipv4.tcp_timestamps - value: 1 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Параметр отвечающий за алгоритмы сегментации TCP пакетов при передаче данных. -# Cubic - алгоритм для высоконагруженных систем, но более структурированный, нежели BIC. -# Включён по умолчанию в linux ядре начиная с версии 2.6.19 -# BBR - Алгоритм от Гугла, получайте максимальную скорость, если у вас широкий канал -- ansible.posix.sysctl: - name: net.ipv4.tcp_congestion_control - value: bbr - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Параметр определяет дисциплину обработки очередей -# FQ делят пропускную способность между всеми соединениями, даёт лучшую пропускную способность в связке с BBR -- ansible.posix.sysctl: - name: sysctl net.core.default_qdisc - value: fq - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Не сохранять результаты измерений TCP соединения в кеше при его закрытии -- ansible.posix.sysctl: - name: net.ipv4.tcp_no_metrics_save - value: 1 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Разрешаем динамическое изменение размера окна TCP стека (окно увеличивается, если не было потерь -# пакетов при передаче в рамках TCP подключения) -- ansible.posix.sysctl: - name: net.ipv4.tcp_window_scaling - value: 1 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Защита от TIME_WAIT атак. -- ansible.posix.sysctl: - name: net.ipv4.tcp_rfc1337 - value: 1 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Не отвечаем на ICMP ECHO запросы, переданные на широковещательный адрес. -- ansible.posix.sysctl: - name: net.ipv4.icmp_echo_ignore_broadcasts - value: 1 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Не отвечаем на ошибочно сформированные сообщения. -- ansible.posix.sysctl: - name: net.ipv4.icmp_ignore_bogus_error_responses - value: 1 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf -# Максимальное число открытых сокетов, ждущих соединения. -# Максимум в CentOS 7 -- ansible.posix.sysctl: - name: net.core.somaxconn - value: 65535 - state: present - sysctl_file: /etc/sysctl.d/tcp_tune.conf - -#- name: Deploy ip_spoofing.conf +# - name: Deploy ip_spoofing.conf # ansible.builtin.template: # src: ip_spoofing.conf.j2 # dest: /etc/sysctl.d/ip_spoofing.conf # mode: "0644" -# Активируем защиту от IP-спуфинга. -- ansible.posix.sysctl: - name: net.ipv4.conf.default.rp_filter - value: 1 - state: present - sysctl_file: /etc/sysctl.d/ip_spoofing.conf -- ansible.posix.sysctl: - name: net.ipv4.conf.all.rp_filter - value: 1 - state: present - sysctl_file: /etc/sysctl.d/ip_spoofing.conf -- ansible.posix.sysctl: - name: net.ipv4.conf.lo.rp_filter - value: 1 - state: present - sysctl_file: /etc/sysctl.d/ip_spoofing.conf - -#- name: Deploy ip_forward.conf +# - name: Deploy ip_forward.conf # ansible.builtin.template: # src: ip_forward.conf.j2 # dest: /etc/sysctl.d/ip_forward.conf # mode: "0644" - -# Запрет на передачу пакетов через сервер (т.е. работу его как шлюза) -- ansible.posix.sysctl: - name: net.ipv4.ip_forward - value: 0 - state: present - sysctl_file: /etc/sysctl.d/ip_forward.conf - -# Запрет на маршрутизацию на основе соответствующей опции в пакете (безопасность) -- ansible.posix.sysctl: - name: net.ipv4.conf.default.accept_source_route - value: 0 - state: present - sysctl_file: /etc/sysctl.d/ip_forward.conf - -# Если в таблице маршрутизации есть маршрут на сеть, с которой пришёл пакет (src ip) -# и он ссылается на данный интерфейс, то такой пакет будет принят. -# остальные будут отброшены. -- ansible.posix.sysctl: - name: net.ipv4.conf.default.rp_filter - value: 1 - state: present - sysctl_file: /etc/sysctl.d/ip_forward.conf -- ansible.posix.sysctl: - name: net.ipv4.conf.all.rp_filter - value: 1 - state: present - sysctl_file: /etc/sysctl.d/ip_forward.conf -- ansible.posix.sysctl: - name: net.ipv4.conf.lo.rp_filter - value: 1 - state: present - sysctl_file: /etc/sysctl.d/ip_forward.conf -- ansible.posix.sysctl: - name: net.ipv4.all.send_redirects - value: 0 - state: present - sysctl_file: /etc/sysctl.d/ip_forward.conf -- ansible.posix.sysctl: - name: net.ipv4.all.accept_redirects - value: 0 - state: present - sysctl_file: /etc/sysctl.d/ip_forward.conf - -#- name: Deploy ip_bridge.conf +# - name: Deploy ip_bridge.conf # ansible.builtin.template: # src: ip_bridge.conf.j2 # dest: /etc/sysctl.d/ip_bridge.conf # mode: "0644" - -# Отключение фильтрации на br интерфейсах. необходимо в некоторых случаях, -# когда NAT не правильно отрабатывает по таким интерфейсам -- ansible.posix.sysctl: - name: net.bridge.bridge-nf-call-ip6tables - value: 0 - state: present - sysctl_file: /etc/sysctl.d/ip_bridge.conf -- ansible.posix.sysctl: - name: net.bridge.bridge-nf-call-iptables - value: 0 - state: present - sysctl_file: /etc/sysctl.d/ip_bridge.conf -- ansible.posix.sysctl: - name: net.bridge.bridge-nf-call-arptables - value: 0 - state: present - sysctl_file: /etc/sysctl.d/ip_bridge.conf - -#- name: Deploy httpd-tune.conf +# - name: Deploy httpd-tune.conf # ansible.builtin.template: # src: httpd-tune.conf.j2 # dest: /etc/sysctl.d/httpd-tune.conf # mode: "0644" -#limit for using memory -- ansible.posix.sysctl: +# limit for using memory + +- name: vm.overcommit_ratio + ansible.posix.sysctl: name: vm.overcommit_ratio value: 100 state: present sysctl_file: /etc/sysctl.d/ip_httpd.conf -- ansible.posix.sysctl: +- name: vm.overcommit_memory + ansible.posix.sysctl: name: vm.overcommit_memory value: 2 state: present diff --git a/roles/rocky9/tasks/tcp_tune.yml b/roles/rocky9/tasks/tcp_tune.yml new file mode 100644 index 0000000..6a056ad --- /dev/null +++ b/roles/rocky9/tasks/tcp_tune.yml @@ -0,0 +1,239 @@ +# TCP syncookies - технология, позволяющая не забивать +# TCP стек, пока TCP сессия полностью не установится. +# Защита на случай TCP Syn атак +# Согласно рекомендациям разработчиков ядра, этот режим лучше отключить. +# http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt +- name: net.ipv4.tcp_syncookies + ansible.posix.sysctl: + name: net.ipv4.tcp_syncookies + value: 0 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf + +# Векторная (минимум, по умолчанию, максимум) переменная в файле tcp_rmem содержит 3 целых числа, определяющих размер буфера сокетов TCP/UDP. +# Минимум: каждый сокет TCP имеет право использовать эту память по факту своего создания. Возможность использования такого буфера гарантируется +# даже при достижении порога ограничения (moderate memory pressure). Размер минимального буфера по умолчанию составляет 8 Кбайт (8192). +# Значение по умолчанию: количество памяти, допустимое для буфера передачи сокета TCP по умолчанию. Это значение применяется взамен параметра +# /proc/sys/net/core/rmem_default, используемого другими протоколами. Значение используемого по умолчанию буфера обычно (по умолчанию) +# составляет 87830 байт. Это определяет размер окна 65535 с заданным по умолчанию значением tcp_adv_win_scale и tcp_app_win = 0, несколько +# меньший, нежели определяет принятое по умолчанию значение tcp_app_win. +# Максимум: максимальный размер буфера, который может быть автоматически выделен для приема сокету TCP. Это значение не отменяет максимума, +# заданного в файле /proc/sys/net/core/rmem_max. При “статическом” выделении памяти с помощью SO_RCVBUF этот параметр не имеет значения. +# На приём TCP пакетов +- name: net.ipv4.tcp_rmem + ansible.posix.sysctl: + name: net.ipv4.tcp_rmem + value: 4096 8388608 16777216 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# На передачу TCP пакетов +- name: net.ipv4.tcp_wmem + ansible.posix.sysctl: + name: net.ipv4.tcp_wmem + value: 4096 4194394 16777216 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Для TCP протокола в целом +- name: net.ipv4.tcp_mem + ansible.posix.sysctl: + name: net.ipv4.tcp_mem + value: 8388608 12582912 16777216 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Для UDP протокола в целом +- name: net.ipv4.udp_mem + ansible.posix.sysctl: + name: net.ipv4.udp_mem + value: 8388608 12582912 16777216 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +- name: net.ipv4.udp_rmem_min + ansible.posix.sysctl: + name: net.ipv4.udp_rmem_min + value: 16384 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +- name: net.ipv4.udp_wmem_min + ansible.posix.sysctl: + name: net.ipv4.udp_wmem_min + value: 16384 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Параметр определяет максимальное количество пакетов в очереди на обработку, если интерфейс получает пакеты быстрее, чем ядро может их обработать. +- name: net.core.netdev_max_backlog + ansible.posix.sysctl: + name: net.core.netdev_max_backlog + value: 500000 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Максимальное число запоминаемых запросов на соединение (TCP Syn), для которых не было получено подтверждения от подключающегося клиента. +- name: net.ipv4.tcp_max_syn_backlog + ansible.posix.sysctl: + name: net.ipv4.tcp_max_syn_backlog + value: 5480000 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Увеличим возможное количество сокетов в состоянии TIME_WAIT. +- name: net.ipv4.tcp_max_tw_buckets + ansible.posix.sysctl: + name: net.ipv4.tcp_max_tw_buckets + value: 5480000 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Разрешаем повторное использование TIME-WAIT сокетов в случаях, если протокол считает это безопасным. +- name: net.ipv4.tcp_tw_reuse + ansible.posix.sysctl: + name: net.ipv4.tcp_tw_reuse + value: 1 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Разрешаем быструю утилизацию сокетов находящихся в состоянии TIME_WAIT DEPRICATRED +#- ansible.posix.sysctl: +# name: net.ipv4.tcp_tw_recycle +# value: 1 +# state: present +# sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Параметр tcp_fin_timeout определяет время сохранения сокета в состоянии FIN-WAIT-2 после его закрытия локальной стороной. +# Партнер может не закрыть это соединение никогда. +- name: net.ipv4.tcp_fin_timeout + ansible.posix.sysctl: + name: net.ipv4.tcp_fin_timeout + value: 3 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Разрешить выборочные подтверждения протокола TCP. Опция необходима для эффективного использования всей доступной +# пропускной способности некоторых сетей +- name: net.ipv4.tcp_sack + ansible.posix.sysctl: + name: net.ipv4.tcp_sack + value: 1 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Число попыток повтора передачи пакетов SYNACK для пассивных соединений TCP. +- name: net.ipv4.tcp_synack_retries + ansible.posix.sysctl: + name: net.ipv4.tcp_synack_retries + value: 1 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Определяет максимальное число допустимых в системе сокетов TCP, не связанных каким-либо идентификатором пользовательского файла (user file handle). +- name: net.ipv4.tcp_max_orphans + ansible.posix.sysctl: + name: net.ipv4.tcp_max_orphans + value: 65536 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Определяется число неудачных попыток, после которого уничтожается соединение TCP, закрытое на локальной стороне. +- name: net.ipv4.tcp_orphan_retries + ansible.posix.sysctl: + name: net.ipv4.tcp_orphan_retries + value: 0 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Проверка наличия подключения по средствам keepalive сообщений. Активируется только для тех сокетов, которые были созданы с флагом SO_KEEPALIVE. +# Через какой промежуток времени после установки подключения начать слать keepalive сообщения (в сек) +- name: net.ipv4.tcp_keepalive_time + ansible.posix.sysctl: + name: net.ipv4.tcp_keepalive_time + value: 600 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Интервал, с которым слать keepalive пакеты (в сек) +- name: net.ipv4.tcp_keepalive_intvl + ansible.posix.sysctl: + name: net.ipv4.tcp_keepalive_intvl + value: 20 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# После скольки неудачных пробах считать соединение разорванным +- name: net.ipv4.tcp_keepalive_probes + ansible.posix.sysctl: + name: net.ipv4.tcp_keepalive_probes + value: 2 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Запрещаем технологию slow start (малый размер окна) в TCP подключениях, +# в которых долгое время не было трафика. +- name: net.ipv4.tcp_slow_start_after_idle + ansible.posix.sysctl: + name: net.ipv4.tcp_slow_start_after_idle + value: 0 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Увеличиваем диапазон локальных портов, доступных для установки исходящих подключений. +- name: net.ipv4.ip_local_port_range + ansible.posix.sysctl: + name: net.ipv4.ip_local_port_range + value: 2000 65000 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Разрешает временные метки протокола TCP. Их наличие позволяет управлять работой протокола в условиях серьезных нагрузок. +- name: net.ipv4.tcp_timestamps + ansible.posix.sysctl: + name: net.ipv4.tcp_timestamps + value: 1 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Параметр отвечающий за алгоритмы сегментации TCP пакетов при передаче данных. +# Cubic - алгоритм для высоконагруженных систем, но более структурированный, нежели BIC. +# Включён по умолчанию в linux ядре начиная с версии 2.6.19 +# BBR - Алгоритм от Гугла, получайте максимальную скорость, если у вас широкий канал +- name: net.ipv4.tcp_congestion_control + ansible.posix.sysctl: + name: net.ipv4.tcp_congestion_control + value: bbr + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Параметр определяет дисциплину обработки очередей +# FQ делят пропускную способность между всеми соединениями, даёт лучшую пропускную способность в связке с BBR +- name: net.core.default_qdisc + ansible.posix.sysctl: + name: net.core.default_qdisc + value: "fq" + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf + +# Не сохранять результаты измерений TCP соединения в кеше при его закрытии +- name: net.ipv4.tcp_no_metrics_save + ansible.posix.sysctl: + name: net.ipv4.tcp_no_metrics_save + value: 1 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Разрешаем динамическое изменение размера окна TCP стека (окно увеличивается, если не было потерь +# пакетов при передаче в рамках TCP подключения) +- name: net.ipv4.tcp_window_scaling + ansible.posix.sysctl: + name: net.ipv4.tcp_window_scaling + value: 1 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Защита от TIME_WAIT атак. +- name: net.ipv4.tcp_rfc1337 + ansible.posix.sysctl: + name: net.ipv4.tcp_rfc1337 + value: 1 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Не отвечаем на ICMP ECHO запросы, переданные на широковещательный адрес. +- name: net.ipv4.icmp_echo_ignore_broadcasts + ansible.posix.sysctl: + name: net.ipv4.icmp_echo_ignore_broadcasts + value: 1 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Не отвечаем на ошибочно сформированные сообщения. +- name: net.ipv4.icmp_ignore_bogus_error_responses + ansible.posix.sysctl: + name: net.ipv4.icmp_ignore_bogus_error_responses + value: 1 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf +# Максимальное число открытых сокетов, ждущих соединения. +# Максимум в CentOS 7 +- name: net.core.somaxconn + ansible.posix.sysctl: + name: net.core.somaxconn + value: 65535 + state: present + sysctl_file: /etc/sysctl.d/tcp_tune.conf diff --git a/roles/root-cert/tasks/main.yml b/roles/root-cert/tasks/main.yml index ba93b76..edec5bf 100644 --- a/roles/root-cert/tasks/main.yml +++ b/roles/root-cert/tasks/main.yml @@ -5,11 +5,11 @@ # register: result # failed_when: not result.stat.exists -- include: debian.yml +- ansible.builtin.include_tasks: debian.yml when: ansible_os_family == "Debian" -- include: red_hat.yml +- ansible.builtin.include_tasks: red_hat.yml when: ansible_os_family == "RedHat" -- include: darwin.yml +- ansible.builtin.include_tasks: darwin.yml when: ansible_os_family == "Darwin"