diff --git a/roles/rocky9/tasks/install-epel-repo.yml b/roles/rocky9/tasks/install-epel-repo.yml new file mode 100644 index 0000000..530a346 --- /dev/null +++ b/roles/rocky9/tasks/install-epel-repo.yml @@ -0,0 +1,18 @@ +--- +- name: Enable EPEL repo + ansible.builtin.package: + name: epel-release + state: present + +- name: Install soft from EPEL + ansible.builtin.package: + name: + - screen + - unrar + - htop + - btop + - atop + - iftop + - nethogs + - nload + state: present diff --git a/roles/rocky9/tasks/ip_bridge.yml b/roles/rocky9/tasks/ip_bridge.yml new file mode 100644 index 0000000..21ca471 --- /dev/null +++ b/roles/rocky9/tasks/ip_bridge.yml @@ -0,0 +1,26 @@ +--- +# Отключение фильтрации на br интерфейсах. необходимо в некоторых случаях, +# когда NAT не правильно отрабатывает по таким интерфейсам +- name: Set 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/03-bridge.conf + when: br_netfilter_status.stat.exists + +- name: Set 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/03-bridge.conf + when: br_netfilter_status.stat.exists + +- name: Set 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/03-bridge.conf + when: br_netfilter_status.stat.exists diff --git a/roles/rocky9/tasks/ip_forward.yml b/roles/rocky9/tasks/ip_forward.yml new file mode 100644 index 0000000..42784c8 --- /dev/null +++ b/roles/rocky9/tasks/ip_forward.yml @@ -0,0 +1,68 @@ +--- +# Запрет на передачу пакетов через сервер (т.е. работу его как шлюза) +- name: Set net.ipv4.ip_forward + ansible.posix.sysctl: + name: net.ipv4.ip_forward + value: 0 + state: present + sysctl_file: /etc/sysctl.d/03-ip_forward.conf + +# Запрет на маршрутизацию на основе соответствующей опции в пакете (безопасность) +- name: Set 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/03-ip_forward.conf + +# Если в таблице маршрутизации есть маршрут на сеть, с которой пришёл пакет (src ip) +# и он ссылается на данный интерфейс, то такой пакет будет принят. +# остальные будут отброшены. +# Когда rp_filter нужно отключать (0) или ослаблять (2): +# - Использование асимметричной маршрутизации (когда пакеты приходят через провайдера А, а уходят через провайдера Б). +# - Настройка сложных схем балансировки трафика (BGP, Multipath). +# - Использование политик маршрутизации (Policy Based Routing via ip rule). +# При строгом режиме 1 ядро проверяет обратный путь по дефолтной таблице main, +# игнорируя кастомные таблицы, что приводит к ложному отбрасыванию пакетов. +- name: Set net.ipv4.conf.default.rp_filter + ansible.posix.sysctl: + name: net.ipv4.conf.default.rp_filter + value: 2 + state: present + sysctl_file: /etc/sysctl.d/03-ip_forward.conf + +- name: Set net.ipv4.conf.all.rp_filter + ansible.posix.sysctl: + name: net.ipv4.conf.all.rp_filter + value: 2 + state: present + sysctl_file: /etc/sysctl.d/03-ip_forward.conf + +- name: Set 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/03-ip_forward.conf + +- name: Set 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/03-ip_forward.conf + +- name: Set 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/03-ip_forward.conf + +- name: Set 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/03-ip_forward.conf diff --git a/roles/rocky9/tasks/kernel_tune.yml b/roles/rocky9/tasks/kernel_tune.yml new file mode 100644 index 0000000..5cfc388 --- /dev/null +++ b/roles/rocky9/tasks/kernel_tune.yml @@ -0,0 +1,95 @@ +--- +# Remove kernel.panic entry from /etc/sysctl.conf +- name: Set kernel.panic + ansible.posix.sysctl: + name: kernel.panic + state: absent + sysctl_file: /etc/sysctl.conf +# Отключаем отслеживание ядром нажатие специальных сочетаний клавиш +- name: Set kernel.sysrq + ansible.posix.sysctl: + name: kernel.sysrq + value: 0 + state: present + sysctl_file: /etc/sysctl.d/01-kernel.conf + +# Добавление к файлу дампа ядра PID процесса +- name: Set kernel.core_uses_pid + ansible.posix.sysctl: + name: kernel.core_uses_pid + value: 1 + state: present + sysctl_file: /etc/sysctl.d/01-kernel.conf +# Здесь указывается максимальное количество байт в одном сообщении при передачи их между процессами +- name: Set kernel.msgmnb + ansible.posix.sysctl: + name: kernel.msgmnb + value: 65536 + state: present + sysctl_file: /etc/sysctl.d/01-kernel.conf +# Здесь определяется максимальный размер сообщения, которое может быть отправлено от одного процесса другому. +- name: Set kernel.msgmax + ansible.posix.sysctl: + name: kernel.msgmax + value: 65536 + state: present + sysctl_file: /etc/sysctl.d/01-kernel.conf + +# Максимальный размер (в байтах) на сегменте shared memory. +- name: Set kernel.shmmax + ansible.posix.sysctl: + name: kernel.shmmax + value: 68719476736 + state: present + sysctl_file: /etc/sysctl.d/01-kernel.conf +# Общее количество разделяемой памяти (в страницах), какое все процессы на сервере могут использовать. +- name: Set kernel.shmall + ansible.posix.sysctl: + name: kernel.shmall + value: 4294967296 + state: present + sysctl_file: /etc/sysctl.d/01-kernel.conf + +# Лимит одновременно открытых файлов в системе +- name: Set fs.file-max + ansible.posix.sysctl: + name: fs.file-max + value: 1000000 + state: present + sysctl_file: /etc/sysctl.d/01-kernel.conf + +# Максимальный размер буфера приема данных для всех соединений. +- name: Set net.core.rmem_max + ansible.posix.sysctl: + name: net.core.rmem_max + value: 33554432 + state: present + sysctl_file: /etc/sysctl.d/01-kernel.conf +# Максимальный размер буфера передачи данных для всех соединений. +- name: Set net.core.wmem_max + ansible.posix.sysctl: + name: net.core.wmem_max + value: 33554432 + state: present + sysctl_file: /etc/sysctl.d/01-kernel.conf +# Размер буфера приема данных по умолчанию для всех соединений. +- name: Set net.core.rmem_default + ansible.posix.sysctl: + name: net.core.rmem_default + value: 8388608 + state: present + sysctl_file: /etc/sysctl.d/01-kernel.conf +# Размер буфера передачи данных по умолчанию для всех соединений. +- name: Set net.core.wmem_default + ansible.posix.sysctl: + name: net.core.wmem_default + value: 4194394 + state: present + sysctl_file: /etc/sysctl.d/01-kernel.conf +# Максимальный размер буфера приема данных для всех соединений. +- name: Set net.core.optmem_max + ansible.posix.sysctl: + name: net.core.optmem_max + value: 40960 + state: present + sysctl_file: /etc/sysctl.d/01-kernel.conf diff --git a/roles/rocky9/tasks/logrotate.yml b/roles/rocky9/tasks/logrotate.yml new file mode 100644 index 0000000..b726ab0 --- /dev/null +++ b/roles/rocky9/tasks/logrotate.yml @@ -0,0 +1,7 @@ +- name: Set logrotate rsyslog + ansible.builtin.template: + src: logrotate-rsyslog.j2 + dest: /etc/logrotate.d/rsyslog + mode: "0644" + owner: root + group: root diff --git a/roles/rocky9/tasks/tcp_tune.yml b/roles/rocky9/tasks/tcp_tune.yml new file mode 100644 index 0000000..01bfaa1 --- /dev/null +++ b/roles/rocky9/tasks/tcp_tune.yml @@ -0,0 +1,262 @@ +# TCP syncookies - технология, позволяющая не забивать +# TCP стек, пока TCP сессия полностью не установится. +# Защита на случай TCP Syn атак +# Согласно рекомендациям разработчиков ядра, этот режим лучше отключить. +# http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt +- name: Set net.ipv4.tcp_syncookies + ansible.posix.sysctl: + name: net.ipv4.tcp_syncookies + value: 0 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.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: Set net.ipv4.tcp_rmem + ansible.posix.sysctl: + name: net.ipv4.tcp_rmem + value: 4096 8388608 16777216 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +# На передачу TCP пакетов +- name: Set net.ipv4.tcp_wmem + ansible.posix.sysctl: + name: net.ipv4.tcp_wmem + value: 4096 4194394 16777216 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +# Для TCP протокола в целом +- name: Set net.ipv4.tcp_mem + ansible.posix.sysctl: + name: net.ipv4.tcp_mem + value: 8388608 12582912 16777216 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +# Для UDP протокола в целом +- name: Set net.ipv4.udp_mem + ansible.posix.sysctl: + name: net.ipv4.udp_mem + value: 8388608 12582912 16777216 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +- name: Set net.ipv4.udp_rmem_min + ansible.posix.sysctl: + name: net.ipv4.udp_rmem_min + value: 16384 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +- name: Set net.ipv4.udp_wmem_min + ansible.posix.sysctl: + name: net.ipv4.udp_wmem_min + value: 16384 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +# Параметр определяет максимальное количество пакетов в очереди на обработку, если интерфейс получает пакеты быстрее, чем ядро может их обработать. +- name: Set net.core.netdev_max_backlog + ansible.posix.sysctl: + name: net.core.netdev_max_backlog + value: 500000 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +# Максимальное число запоминаемых запросов на соединение (TCP Syn), для которых не было получено подтверждения от подключающегося клиента. +- name: Set 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/02-tcp.conf +# Увеличим возможное количество сокетов в состоянии TIME_WAIT. +- name: Set 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/02-tcp.conf +# Разрешаем повторное использование TIME-WAIT сокетов в случаях, если протокол считает это безопасным. +- name: Set net.ipv4.tcp_tw_reuse + ansible.posix.sysctl: + name: net.ipv4.tcp_tw_reuse + value: 1 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf + +# Разрешаем быструю утилизацию сокетов находящихся в состоянии TIME_WAIT DEPRICATRED +# - ansible.posix.sysctl: +# name: net.ipv4.tcp_tw_recycle +# value: 1 +# state: present +# sysctl_file: /etc/sysctl.d/02-tcp.conf + +# Параметр tcp_fin_timeout определяет время сохранения сокета в состоянии FIN-WAIT-2 после его закрытия локальной стороной. +# Партнер может не закрыть это соединение никогда. +- name: Set net.ipv4.tcp_fin_timeout + ansible.posix.sysctl: + name: net.ipv4.tcp_fin_timeout + value: 3 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +# Разрешить выборочные подтверждения протокола TCP. Опция необходима для эффективного использования всей доступной +# пропускной способности некоторых сетей +- name: Set net.ipv4.tcp_sack + ansible.posix.sysctl: + name: net.ipv4.tcp_sack + value: 1 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +# Число попыток повтора передачи пакетов SYNACK для пассивных соединений TCP. +- name: Set net.ipv4.tcp_synack_retries + ansible.posix.sysctl: + name: net.ipv4.tcp_synack_retries + value: 1 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +# Определяет максимальное число допустимых в системе сокетов TCP, не связанных каким-либо идентификатором пользовательского файла (user file handle). +- name: Set net.ipv4.tcp_max_orphans + ansible.posix.sysctl: + name: net.ipv4.tcp_max_orphans + value: 65536 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +# Определяется число неудачных попыток, после которого уничтожается соединение TCP, закрытое на локальной стороне. +- name: Set net.ipv4.tcp_orphan_retries + ansible.posix.sysctl: + name: net.ipv4.tcp_orphan_retries + value: 0 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +# Проверка наличия подключения по средствам keepalive сообщений. Активируется только для тех сокетов, которые были созданы с флагом SO_KEEPALIVE. +# Через какой промежуток времени после установки подключения начать слать keepalive сообщения (в сек) +- name: Set net.ipv4.tcp_keepalive_time + ansible.posix.sysctl: + name: net.ipv4.tcp_keepalive_time + value: 600 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +# Интервал, с которым слать keepalive пакеты (в сек) +- name: Set net.ipv4.tcp_keepalive_intvl + ansible.posix.sysctl: + name: net.ipv4.tcp_keepalive_intvl + value: 20 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +# После скольки неудачных пробах считать соединение разорванным +- name: Set net.ipv4.tcp_keepalive_probes + ansible.posix.sysctl: + name: net.ipv4.tcp_keepalive_probes + value: 2 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +# Запрещаем технологию slow start (малый размер окна) в TCP подключениях, +# в которых долгое время не было трафика. +- name: Set 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/02-tcp.conf +# Увеличиваем диапазон локальных портов, доступных для установки исходящих подключений. +- name: Set 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/02-tcp.conf +# Разрешает временные метки протокола TCP. Их наличие позволяет управлять работой протокола в условиях серьезных нагрузок. +- name: Set net.ipv4.tcp_timestamps + ansible.posix.sysctl: + name: net.ipv4.tcp_timestamps + value: 1 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +# Параметр отвечающий за алгоритмы сегментации TCP пакетов при передаче данных. +# Cubic - алгоритм для высоконагруженных систем, но более структурированный, нежели BIC. +# Включён по умолчанию в linux ядре начиная с версии 2.6.19 +# BBR - Алгоритм от Гугла, получайте максимальную скорость, если у вас широкий канал +- name: Set net.ipv4.tcp_congestion_control + ansible.posix.sysctl: + name: net.ipv4.tcp_congestion_control + value: bbr + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +# Параметр определяет дисциплину обработки очередей +# FQ делят пропускную способность между всеми соединениями, даёт лучшую пропускную способность в связке с BBR +- name: Set net.core.default_qdisc + ansible.posix.sysctl: + name: net.core.default_qdisc + value: "fq" + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf + +# Не сохранять результаты измерений TCP соединения в кеше при его закрытии +- name: Set 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/02-tcp.conf +# Разрешаем динамическое изменение размера окна TCP стека (окно увеличивается, если не было потерь +# пакетов при передаче в рамках TCP подключения) +- name: Set net.ipv4.tcp_window_scaling + ansible.posix.sysctl: + name: net.ipv4.tcp_window_scaling + value: 1 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +# Защита от TIME_WAIT атак. +- name: Set net.ipv4.tcp_rfc1337 + ansible.posix.sysctl: + name: net.ipv4.tcp_rfc1337 + value: 1 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf +# Не отвечаем на ICMP ECHO запросы, переданные на широковещательный адрес. +- name: Set 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/02-tcp.conf +# Не отвечаем на ошибочно сформированные сообщения. +- name: Set 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/02-tcp.conf +# Максимальное число открытых сокетов, ждущих соединения. +# Максимум в CentOS 7 +- name: Set net.core.somaxconn + ansible.posix.sysctl: + name: net.core.somaxconn + value: 65535 + state: present + sysctl_file: /etc/sysctl.d/02-tcp.conf + +- name: Set net.netfilter.nf_conntrack_max + ansible.posix.sysctl: + name: net.netfilter.nf_conntrack_max + value: 524288 + state: present + sysctl_file: /etc/sysctl.d/02-udp.conf + +- name: Set net.netfilter.nf_conntrack_udp_timeout + ansible.posix.sysctl: + name: net.netfilter.nf_conntrack_udp_timeout + value: 10 + state: present + sysctl_file: /etc/sysctl.d/02-udp.conf + +- name: Set net.netfilter.nf_conntrack_udp_timeout_stream + ansible.posix.sysctl: + name: net.netfilter.nf_conntrack_udp_timeout_stream + value: 30 + state: present + sysctl_file: /etc/sysctl.d/02-udp.conf diff --git a/roles/rocky9/templates/logrotate-rsyslog.j2 b/roles/rocky9/templates/logrotate-rsyslog.j2 new file mode 100644 index 0000000..4d5d772 --- /dev/null +++ b/roles/rocky9/templates/logrotate-rsyslog.j2 @@ -0,0 +1,65 @@ +/var/log/cron { + daily + rotate {{ logrotate_interval }} + size 50M + compress + delaycompress + missingok + notifempty + sharedscripts + postrotate + /usr/bin/systemctl reload rsyslog.service 2> /dev/null || true + endscript +} +/var/log/maillog { + daily + rotate {{ logrotate_interval }} + size 50M + compress + delaycompress + missingok + notifempty + sharedscripts + postrotate + /usr/bin/systemctl reload rsyslog.service 2> /dev/null || true + endscript +} +/var/log/secure { + daily + rotate {{ logrotate_interval }} + size 50M + compress + delaycompress + missingok + notifempty + sharedscripts + postrotate + /usr/bin/systemctl reload rsyslog.service 2> /dev/null || true + endscript +} +/var/log/spooler +{ + daily + rotate {{ logrotate_interval }} + compress + missingok + notifempty + sharedscripts + postrotate + /usr/bin/systemctl -s HUP kill rsyslog.service >/dev/null 2>&1 || true + endscript +} + +/var/log/messages { + daily + rotate {{ logrotate_interval }} + size 50M + compress + delaycompress + missingok + notifempty + sharedscripts + postrotate + /usr/bin/systemctl reload rsyslog.service 2> /dev/null || true + endscript +}