initial commit
This commit is contained in:
parent
13a28dda88
commit
90e35a58f0
47 changed files with 1436 additions and 0 deletions
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"python-envs.defaultEnvManager": "ms-python.python:system"
|
||||||
|
}
|
||||||
40
inventory/prod/group_vars/all/users.yml
Normal file
40
inventory/prod/group_vars/all/users.yml
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
---
|
||||||
|
# ── Admin groups ───────────────────────────────────────────────────────────────
|
||||||
|
# Add new users here. Each entry requires:
|
||||||
|
# username — Linux username
|
||||||
|
# ssh_key — public SSH key string (optional, but strongly recommended)
|
||||||
|
#
|
||||||
|
# To allow a group on a specific host/group, override `users_allowed_admin_groups`
|
||||||
|
# in the corresponding group_vars/<group>/vars.yml or host_vars/<host>/vars.yml.
|
||||||
|
|
||||||
|
users_admin_groups:
|
||||||
|
super_admin:
|
||||||
|
- username: s.lebed
|
||||||
|
ssh_key: >-
|
||||||
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQChuu3tibT89C77sjX19kqqfr3qqM1eknqipnvZzd23cZTn8ULyWLLmOSYiEuOP5fcz55PVOpe8k8eBC+JvCu+/W1XdPH/q7GCL00b0ANcMKMZHvi/zjFSZj7NoFeypVF4/dutTWudpftFdmfJdHt5wyFs37cVNc4WWbNSASQBHhzR3GSdq7h5H5Ed0ua6AIFNR9Mt0rFI5JYbMaU/mO5WvvrlIq4T1X1zpHUDPloFXmnWd+WPuGPR7ecHP0mmXYSoWDCjEBexCUiAPb9BhR7dbe9lDjWwDB3J9daKXQ9rFpZ6f91DyD6sImarJSmTYXHnAn3u/Hj3IW5TYW4XMypob+NIRa3o7Zuu0rZ2uqwFdSxe9sOJHkgxTxwnJpBxRsQCpAl4uyGGOmTUiYDY7rK86zk1e4xetwt7DS16WOqdrBSNw6sKmvAtkcxacmbOO68+ixmWERpbFXuJtuCQodOtgf+vGUbXASJ1RQtmrBP0qKbV+MYqMOLP1RPA6UUeYssA/lG0uO4u7xxAW30MExZjeETgzGONbSBshqwFt09aXYs57Esp+kn4cFYcYkhvbPeicFiaCwQ4RWd+iAryd6KFNFrc0o0TuqbwE+3Dba2dU3P2KQ+nVIYGeDs62OyYV0yCN0ZEHDzkJAsbqNMDVpwCv4YdZdg0iB40aednRzNYv3Q== s.lebed@gigacoms.ru
|
||||||
|
|
||||||
|
- username: a.kazantsev
|
||||||
|
# Note: key comment says a.kazantsev — verify the key owner if needed
|
||||||
|
ssh_key: >-
|
||||||
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClB+roxcr/POfhJVq3jFIzZD36nRVhfYq9WaQBr6o2RvMHM+B/2yRM8OeN6jhhYYFB8z7X5o8j1/ZC2u/80LLJtEQ0s8DCb4l4Ie7IY3POBYlmwtvlnhNFsGlKoAoQr0jpPUwMiV7wdBtHYCqHJM69+VpWCnqOkI+hrdj5oxSm26g6AKL0lm9AJO8KnbIpUCHgnQ3EcPcfQE7OpspVP6nbp4SwipJbnG4yYeKB6l77ESUdCkgwwLCv4DCpxJ846J9aN39Bu273hmEoO6+Bw0wAPRruLp5/AzPni7frcncdGuPfOmi+RAoOsRqoO/c122soAbQn3074QtEKwuC+zFKH a.kazantsev@gigacoms.ru
|
||||||
|
|
||||||
|
middle_admin:
|
||||||
|
[]
|
||||||
|
# Example:
|
||||||
|
# - username: m.ivanov
|
||||||
|
# ssh_key: "ssh-rsa AAAA..."
|
||||||
|
|
||||||
|
junior_admin:
|
||||||
|
[]
|
||||||
|
# Example:
|
||||||
|
# - username: j.petrov
|
||||||
|
# ssh_key: "ssh-rsa AAAA..."
|
||||||
|
|
||||||
|
# ── Default access policy ──────────────────────────────────────────────────────
|
||||||
|
# Which admin groups are provisioned on hosts by default.
|
||||||
|
# Override in group_vars/<os_group>/vars.yml or host_vars/<host>/vars.yml
|
||||||
|
# to restrict access on specific servers.
|
||||||
|
users_allowed_admin_groups:
|
||||||
|
- super_admin
|
||||||
|
- middle_admin
|
||||||
|
- junior_admin
|
||||||
37
inventory/prod/group_vars/all/vars.yml
Normal file
37
inventory/prod/group_vars/all/vars.yml
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
---
|
||||||
|
# ── SSH connection ─────────────────────────────────────────────────────────────
|
||||||
|
# Credentials are injected from GitLab CI/CD Variables:
|
||||||
|
# ANSIBLE_SSH_USER — remote user
|
||||||
|
# ANSIBLE_SSHKEY_ID_RSA — private SSH key (записывается в ~/.ssh/id_rsa в before_script)
|
||||||
|
# ANSIBLE_BECOME_PASS — sudo password
|
||||||
|
ansible_user: "{{ lookup('env', 'ANSIBLE_SSH_USER') | mandatory }}"
|
||||||
|
ansible_become: true
|
||||||
|
ansible_become_method: sudo
|
||||||
|
ansible_become_pass: "{{ lookup('env', 'ANSIBLE_BECOME_PASS') | mandatory }}"
|
||||||
|
|
||||||
|
ansible_ssh_common_args: "-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
|
||||||
|
|
||||||
|
# Zabbix agent default settings
|
||||||
|
agent_major_version: "7.0"
|
||||||
|
agent_variant: "2"
|
||||||
|
agent_2_plugin_list: ['']
|
||||||
|
agent_param_server:
|
||||||
|
- 10.203.0.50
|
||||||
|
agent_param_serveractive:
|
||||||
|
- 10.203.0.50
|
||||||
|
agent_param_tlsconnect: unencrypted
|
||||||
|
agent_param_tlsaccept:
|
||||||
|
- unencrypted
|
||||||
|
|
||||||
|
# Chrony NTP Client settings
|
||||||
|
chrony_log_enable: true
|
||||||
|
chrony_log: measurements statistics tracking
|
||||||
|
chrony_logdir: /var/log/chrony/
|
||||||
|
chrony_ntp_servers:
|
||||||
|
- 10.203.2.11
|
||||||
|
- 10.203.2.12
|
||||||
|
chrony_rtcsync: true
|
||||||
|
chrony_timezone: Europe/Moscow
|
||||||
|
# Firewalld defaults
|
||||||
|
firewall_disable_conflicting_services: true
|
||||||
|
firewall_transactional_update_reboot_ok: true
|
||||||
10
inventory/prod/group_vars/centos/vars.yml
Normal file
10
inventory/prod/group_vars/centos/vars.yml
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
# ── CentOS 7 specifics ────────────────────────────────────────────────────────
|
||||||
|
ansible_python_interpreter: /usr/bin/python3
|
||||||
|
|
||||||
|
# Group that grants sudo privileges on RHEL/CentOS
|
||||||
|
users_sudo_group: wheel
|
||||||
|
|
||||||
|
# Restrict access example — uncomment to allow only super_admin on all CentOS hosts:
|
||||||
|
# users_allowed_admin_groups:
|
||||||
|
# - super_admin
|
||||||
10
inventory/prod/group_vars/debian/vars.yml
Normal file
10
inventory/prod/group_vars/debian/vars.yml
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
# ── Debian 12 specifics ───────────────────────────────────────────────────────
|
||||||
|
ansible_python_interpreter: /usr/bin/python3
|
||||||
|
|
||||||
|
# Group that grants sudo privileges on Debian/Ubuntu
|
||||||
|
users_sudo_group: sudo
|
||||||
|
|
||||||
|
# Restrict access example — uncomment to allow only super_admin on all Debian hosts:
|
||||||
|
# users_allowed_admin_groups:
|
||||||
|
# - super_admin
|
||||||
10
inventory/prod/group_vars/rocky9/vars.yml
Normal file
10
inventory/prod/group_vars/rocky9/vars.yml
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
# ── Rocky Linux 9 specifics ───────────────────────────────────────────────────
|
||||||
|
ansible_python_interpreter: /usr/bin/python3
|
||||||
|
|
||||||
|
# Группа для sudo-привилегий на RHEL-совместимых системах
|
||||||
|
users_sudo_group: wheel
|
||||||
|
|
||||||
|
# Переопределяем логику named-роли: RedHat.yml возвращает '2' для версий != 8,
|
||||||
|
# на Rocky 9 нужен python3-netaddr / python3-dns
|
||||||
|
named_python_version: "3"
|
||||||
13
inventory/prod/hosts.yml
Normal file
13
inventory/prod/hosts.yml
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
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
|
||||||
14
playbooks/rocky9.yml
Normal file
14
playbooks/rocky9.yml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
---
|
||||||
|
- name: Initial Rocky9 Configuration
|
||||||
|
|
||||||
|
hosts: rocky9-template
|
||||||
|
# - 172.20.21.193
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
ansible_ssh_user: root
|
||||||
|
ansible_ssh_password: nmklop90
|
||||||
|
reboot_system: false
|
||||||
|
hostname: rocky9-template.local.mrwho.ru
|
||||||
|
roles:
|
||||||
|
- rocky9
|
||||||
|
- root-cert
|
||||||
8
roles/rocky9/defaults/main.yml
Normal file
8
roles/rocky9/defaults/main.yml
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
---
|
||||||
|
hostname: centos01.local.mrwho.ru
|
||||||
|
ip4_addr: 172.20.21.101/24
|
||||||
|
ip4_gate: 172.20.21.1
|
||||||
|
ip4_dns:
|
||||||
|
- 172.20.21.1
|
||||||
|
- 192.168.1.1
|
||||||
|
reboot_system: false
|
||||||
0
roles/rocky9/handlers/main.yml
Normal file
0
roles/rocky9/handlers/main.yml
Normal file
37
roles/rocky9/tasks/create_users.yml
Normal file
37
roles/rocky9/tasks/create_users.yml
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
---
|
||||||
|
- name: Create users
|
||||||
|
ansible.builtin.user:
|
||||||
|
name: mrwho
|
||||||
|
comment: Great and mighty
|
||||||
|
# uid: 1001
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Add SSH key
|
||||||
|
ansible.posix.authorized_key:
|
||||||
|
user: mrwho
|
||||||
|
state: present
|
||||||
|
key: "{{ item }}"
|
||||||
|
with_file:
|
||||||
|
- mrwho.ssh.pub
|
||||||
|
|
||||||
|
- name: Add to sudoers
|
||||||
|
community.general.sudoers:
|
||||||
|
name: mrwho
|
||||||
|
user: mrwho
|
||||||
|
commands: ALL
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Update mrwho .bashrc
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: .bashrc.j2
|
||||||
|
dest: /home/mrwho/.bashrc
|
||||||
|
owner: mrwho
|
||||||
|
mode: "0644"
|
||||||
|
# group: mrwho
|
||||||
|
|
||||||
|
# - name: Update root .bashrc
|
||||||
|
# template:
|
||||||
|
# src: .bashrc.j2
|
||||||
|
# dest: /root/.bashrc
|
||||||
|
# owner: root
|
||||||
|
# group: root
|
||||||
92
roles/rocky9/tasks/install_packages.yml
Normal file
92
roles/rocky9/tasks/install_packages.yml
Normal file
|
|
@ -0,0 +1,92 @@
|
||||||
|
---
|
||||||
|
# - name: Add Nginx Repo
|
||||||
|
# template:
|
||||||
|
# src: nginx.repo.j2
|
||||||
|
# dest: /etc/yum.repos.d/nginx.repo
|
||||||
|
# owner: root
|
||||||
|
# group: root
|
||||||
|
# - name: Configure dnf to use fastest mirror
|
||||||
|
# ansible.builtin.lineinfile:
|
||||||
|
# path: /etc/dnf/dnf.conf
|
||||||
|
# regexp: '^fastestmirror='
|
||||||
|
# line: 'fastestmirror=True'
|
||||||
|
|
||||||
|
- name: Enable fastestmirror in DNF
|
||||||
|
community.general.ini_file:
|
||||||
|
path: /etc/dnf/dnf.conf
|
||||||
|
section: main
|
||||||
|
option: fastestmirror
|
||||||
|
value: "True"
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Enable parallel downloads in DNF
|
||||||
|
community.general.ini_file:
|
||||||
|
path: /etc/dnf/dnf.conf
|
||||||
|
section: main
|
||||||
|
option: max_parallel_downloads
|
||||||
|
value: "10"
|
||||||
|
state: present
|
||||||
|
backup: yes
|
||||||
|
|
||||||
|
- name: Ensure the crb repository is enabled
|
||||||
|
community.general.dnf_config_manager:
|
||||||
|
name: crb
|
||||||
|
state: enabled
|
||||||
|
|
||||||
|
- name: Install EPEL repo
|
||||||
|
ansible.builtin.dnf:
|
||||||
|
name:
|
||||||
|
- epel-release
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Upgrade all packages
|
||||||
|
ansible.builtin.dnf:
|
||||||
|
name: "*"
|
||||||
|
state: latest
|
||||||
|
|
||||||
|
- name: Install soft
|
||||||
|
ansible.builtin.dnf:
|
||||||
|
name:
|
||||||
|
- net-tools
|
||||||
|
- mc
|
||||||
|
- cronie
|
||||||
|
- logrotate
|
||||||
|
- sudo
|
||||||
|
- traceroute
|
||||||
|
- tcpdump
|
||||||
|
- screen
|
||||||
|
- whois
|
||||||
|
- telnet
|
||||||
|
- sed
|
||||||
|
- tar
|
||||||
|
- unzip
|
||||||
|
- unrar
|
||||||
|
- gzip
|
||||||
|
- rsync
|
||||||
|
- sysstat
|
||||||
|
- dos2unix
|
||||||
|
- iperf3
|
||||||
|
- wget
|
||||||
|
- ntsysv
|
||||||
|
- dmidecode
|
||||||
|
- nfs-utils
|
||||||
|
- git
|
||||||
|
- sos
|
||||||
|
- mtr
|
||||||
|
- lshw
|
||||||
|
- irqbalance
|
||||||
|
- iotop
|
||||||
|
- strace
|
||||||
|
- numactl
|
||||||
|
- lsof
|
||||||
|
- nano
|
||||||
|
- htop
|
||||||
|
- btop
|
||||||
|
- bind-utils
|
||||||
|
- psmisc
|
||||||
|
# - speedtest-cli
|
||||||
|
- python-pip
|
||||||
|
- open-vm-tools
|
||||||
|
- qemu-guest-agent
|
||||||
|
# - deltarpm
|
||||||
|
state: latest
|
||||||
41
roles/rocky9/tasks/main.yml
Normal file
41
roles/rocky9/tasks/main.yml
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
---
|
||||||
|
- name: Set a hostname
|
||||||
|
ansible.builtin.hostname:
|
||||||
|
name: "{{ hostname }}"
|
||||||
|
|
||||||
|
- name: Set Prompt
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: prompt.sh.j2
|
||||||
|
dest: /etc/profile.d/prompt.sh
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
|
# - name: Create users
|
||||||
|
# ansible.builtin.include_tasks:
|
||||||
|
# file: create_users.yml
|
||||||
|
|
||||||
|
- name: Syctl tuning
|
||||||
|
ansible.builtin.include_tasks:
|
||||||
|
file: sysctl_tuning.yml
|
||||||
|
|
||||||
|
# - name: Setup NIC to eth0
|
||||||
|
# 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: Install packages
|
||||||
|
ansible.builtin.include_tasks:
|
||||||
|
file: install_packages.yml
|
||||||
|
|
||||||
|
- name: Setup secutity options
|
||||||
|
ansible.builtin.include_tasks:
|
||||||
|
file: security_setup.yml
|
||||||
|
|
||||||
|
- name: Reboot System
|
||||||
|
ansible.builtin.reboot:
|
||||||
|
reboot_timeout: 60
|
||||||
|
when: reboot_system is true
|
||||||
15
roles/rocky9/tasks/security_setup.yml
Normal file
15
roles/rocky9/tasks/security_setup.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
- name: Disable SELinux
|
||||||
|
ansible.posix.selinux:
|
||||||
|
state: disabled
|
||||||
|
|
||||||
|
- name: Explicitly specifying positional matched groups in replacement
|
||||||
|
ansible.builtin.replace:
|
||||||
|
path: /etc/ssh/sshd_config
|
||||||
|
regexp: ^(ListenAddress[ ]+)[^\n]+$
|
||||||
|
replace: \g<1>0.0.0.0
|
||||||
|
|
||||||
|
# - name: Disable Root Login
|
||||||
|
# template:
|
||||||
|
# src: permitrootlogin.conf.j2
|
||||||
|
# dest: /etc/ssh/sshd_config.d/01-permitrootlogin.conf
|
||||||
29
roles/rocky9/tasks/set_network_nic.yml
Normal file
29
roles/rocky9/tasks/set_network_nic.yml
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
---
|
||||||
|
- 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-eth0.link
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
|
- name: Set network connection
|
||||||
|
community.general.nmcli:
|
||||||
|
conn_name: eth0
|
||||||
|
ifname: eth0
|
||||||
|
type: ethernet
|
||||||
|
mac: "{{ ansible_default_ipv4.macaddress }}"
|
||||||
|
method4: auto
|
||||||
|
method6: disabled
|
||||||
|
state: present
|
||||||
|
|
||||||
|
# - name: MAC Address
|
||||||
|
# debug: msg="{{ ansible_default_ipv4.macaddress }}"
|
||||||
54
roles/rocky9/tasks/set_nic_names_eth.yml
Normal file
54
roles/rocky9/tasks/set_nic_names_eth.yml
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
---
|
||||||
|
- name: Формируем отсортированный список физических интерфейсов
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
# Сортировка гарантирует порядок: первый в списке станет eth0
|
||||||
|
physical_interfaces: "{{ ansible_interfaces | json_query('[? !contains(`' + (ignored_interfaces | join(' ')) + '`, @)]') | sort }}"
|
||||||
|
|
||||||
|
- name: Сохраняем сетевые настройки первого интерфейса (будущего eth0)
|
||||||
|
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_gw: "{{ ansible_default_ipv4.gateway | default(omit) }}"
|
||||||
|
|
||||||
|
- name: Настройка eth0 с сохранением текущего IP
|
||||||
|
community.general.nmcli:
|
||||||
|
conn_name: eth0
|
||||||
|
ifname: eth0
|
||||||
|
type: ethernet
|
||||||
|
mac: "{{ ansible_facts[first_iface]['macaddress'] }}"
|
||||||
|
ip4: "{{ current_ip }}/{{ current_mask }}"
|
||||||
|
gw4: "{{ current_gw }}"
|
||||||
|
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: Применение настроек (поднятие eth0)
|
||||||
|
ansible.builtin.shell: nmcli device connect eth0 # noqa: command-instead-of-shell ignore-errors
|
||||||
|
async: 20
|
||||||
|
poll: 0
|
||||||
|
ignore_errors: true # noqa: ignore-errors
|
||||||
|
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
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Перезапуск NetworkManager для чистоты
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: NetworkManager
|
||||||
|
state: restarted
|
||||||
|
async: 30
|
||||||
|
poll: 0
|
||||||
415
roles/rocky9/tasks/sysctl_tuning.yml
Normal file
415
roles/rocky9/tasks/sysctl_tuning.yml
Normal file
|
|
@ -0,0 +1,415 @@
|
||||||
|
---
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# Добавление к файлу дампа ядра 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
|
||||||
|
|
||||||
|
# Максимальный размер (в байтах) на сегменте 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
|
||||||
|
|
||||||
|
# Лимит одновременно открытых файлов в системе
|
||||||
|
- ansible.posix.sysctl:
|
||||||
|
name: fs.file-max
|
||||||
|
value: 1000000
|
||||||
|
state: present
|
||||||
|
sysctl_file: /etc/sysctl.d/kernel_tune.conf
|
||||||
|
|
||||||
|
# Максимальный размер буфера приема данных для всех соединений.
|
||||||
|
- 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: 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
|
||||||
|
# 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
|
||||||
|
# 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
|
||||||
|
# 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
|
||||||
|
# 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
|
||||||
|
# ansible.builtin.template:
|
||||||
|
# src: httpd-tune.conf.j2
|
||||||
|
# dest: /etc/sysctl.d/httpd-tune.conf
|
||||||
|
# mode: "0644"
|
||||||
|
#limit for using memory
|
||||||
|
- 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
|
||||||
|
value: 2
|
||||||
|
state: present
|
||||||
|
sysctl_file: /etc/sysctl.d/ip_httpd.conf
|
||||||
30
roles/rocky9/templates/.bashrc.j2
Normal file
30
roles/rocky9/templates/.bashrc.j2
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
# .bashrc
|
||||||
|
|
||||||
|
# Source global definitions
|
||||||
|
if [ -f /etc/bashrc ]; then
|
||||||
|
. /etc/bashrc
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Uncomment the following line if you don't like systemctl's auto-paging feature:
|
||||||
|
# export SYSTEMD_PAGER=
|
||||||
|
|
||||||
|
# User specific aliases and functions
|
||||||
|
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]
|
||||||
|
then
|
||||||
|
PATH="$HOME/.local/bin:$HOME/bin:$PATH"
|
||||||
|
fi
|
||||||
|
export PATH
|
||||||
|
|
||||||
|
b=`tput bold`
|
||||||
|
n=`tput sgr0`
|
||||||
|
alias ls='ls --color=auto'
|
||||||
|
alias ll='ls -l'
|
||||||
|
alias rm='rm -i'
|
||||||
|
alias cp='cp -i'
|
||||||
|
alias mv='mv -i'
|
||||||
|
|
||||||
|
echo -e "${b}Hostname:${n} `hostname` \t\t IP address: `/sbin/ifconfig | grep -v 127.0.0.1 | grep "inet " | awk -F: '{print $1}' | awk '{print $2}'`"
|
||||||
|
echo -e "${b}CPU load:${n} `cat /proc/loadavg | cut -d" " -f1-3`"
|
||||||
|
echo -e "${b}Uptime:${n} `uptime | cut -d" " -f 4-7 | cut -d"," -f1-2`"
|
||||||
|
echo -e "Free memory: `cat /proc/meminfo | grep MemFree | awk {'print int($2/1000)'}` MB \t\t Total memory: `cat /proc/meminfo | grep MemTotal | awk {'print int($2/1000)'}` MB"
|
||||||
|
echo -e "Proccess number: `cat /proc/loadavg | cut -d"/" -f2| cut -d" " -f1`\n"
|
||||||
5
roles/rocky9/templates/70-eth0.link.j2
Normal file
5
roles/rocky9/templates/70-eth0.link.j2
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
[Match]
|
||||||
|
MACAddress={{ ansible_default_ipv4.macaddress }}
|
||||||
|
|
||||||
|
[Link]
|
||||||
|
Name=eth0
|
||||||
3
roles/rocky9/templates/httpd-tune.conf.j2
Normal file
3
roles/rocky9/templates/httpd-tune.conf.j2
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
#limit for using memory
|
||||||
|
vm.overcommit_ratio = 100
|
||||||
|
vm.overcommit_memory = 2
|
||||||
17
roles/rocky9/templates/ifcfg-eth0.j2
Normal file
17
roles/rocky9/templates/ifcfg-eth0.j2
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
TYPE = "Ethernet"
|
||||||
|
NAME = "eth0"
|
||||||
|
DEVICE = "eth0"
|
||||||
|
ONBOOT = "yes"
|
||||||
|
|
||||||
|
PV4_FAILURE_FATAL="no"
|
||||||
|
IPV6INIT="no"
|
||||||
|
IPV6_AUTOCONF="no"
|
||||||
|
IPV6_DEFROUTE="no"
|
||||||
|
IPV6_FAILURE_FATAL="no"
|
||||||
|
|
||||||
|
NM_CONTROLLED=no
|
||||||
|
BOOTPROTO=none
|
||||||
|
IPADDR=172.20.21.101
|
||||||
|
NETMASK=255.255.255.0
|
||||||
|
GATEWAY=172.20.21.1
|
||||||
|
|
||||||
5
roles/rocky9/templates/ip_bridge.conf.j2
Normal file
5
roles/rocky9/templates/ip_bridge.conf.j2
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
# Отключение фильтрации на br интерфейсах. необходимо в некоторых случаях,
|
||||||
|
# когда NAT не правильно отрабатывает по таким интерфейсам
|
||||||
|
net.bridge.bridge-nf-call-ip6tables = 0
|
||||||
|
net.bridge.bridge-nf-call-iptables = 0
|
||||||
|
net.bridge.bridge-nf-call-arptables = 0
|
||||||
14
roles/rocky9/templates/ip_forward.conf.j2
Normal file
14
roles/rocky9/templates/ip_forward.conf.j2
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
# Запрет на передачу пакетов через сервер (т.е. работу его как шлюза)
|
||||||
|
net.ipv4.ip_forward = 0
|
||||||
|
|
||||||
|
# Запрет на маршрутизацию на основе соответствующей опции в пакете (безопасность)
|
||||||
|
net.ipv4.conf.j2.default.accept_source_route = 0
|
||||||
|
|
||||||
|
# Если в таблице маршрутизации есть маршрут на сеть, с которой пришёл пакет (src ip)
|
||||||
|
# и он ссылается на данный интерфейс, то такой пакет будет принят.
|
||||||
|
# остальные будут отброшены.
|
||||||
|
net.ipv4.conf.default.rp_filter = 1
|
||||||
|
net.ipv4.conf.all.rp_filter=1
|
||||||
|
net.ipv4.conf.lo.rp_filter=1
|
||||||
|
net.ipv4.all.send_redirects=0
|
||||||
|
net.ipv4.all.accept_redirects=0
|
||||||
27
roles/rocky9/templates/ip_netfilter.conf.j2
Normal file
27
roles/rocky9/templates/ip_netfilter.conf.j2
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
# Увеличение лимита подключений, которые хранит conntrack (iptables)
|
||||||
|
net.netfilter.nf_conntrack_max=10485760
|
||||||
|
net.nf_conntrack_max=10485760
|
||||||
|
|
||||||
|
# Сколько времени conntrack будет хранить в памяти информацию о сессии, если:
|
||||||
|
net.netfilter.nf_conntrack_generic_timeout=60
|
||||||
|
net.netfilter.nf_conntrack_tcp_timeout_syn_sent=120
|
||||||
|
net.netfilter.nf_conntrack_tcp_timeout_syn_recv=60
|
||||||
|
net.netfilter.nf_conntrack_tcp_timeout_established=600
|
||||||
|
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=120
|
||||||
|
net.netfilter.nf_conntrack_tcp_timeout_close_wait=60
|
||||||
|
net.netfilter.nf_conntrack_tcp_timeout_last_ack=30
|
||||||
|
net.netfilter.nf_conntrack_tcp_timeout_time_wait=120
|
||||||
|
net.netfilter.nf_conntrack_tcp_timeout_close=10
|
||||||
|
net.netfilter.nf_conntrack_tcp_timeout_max_retrans=120
|
||||||
|
net.netfilter.nf_conntrack_tcp_timeout_unacknowledged=300
|
||||||
|
#net.netfilter.nf_conntrack_udp_timeout=20
|
||||||
|
#net.netfilter.nf_conntrack_udp_timeout_stream=50
|
||||||
|
net.netfilter.nf_conntrack_icmp_timeout=20
|
||||||
|
net.netfilter.nf_conntrack_events_retry_timeout=5
|
||||||
|
|
||||||
|
#Soft irq budget TCP/UDP Tuning (default 300)
|
||||||
|
net.core.netdev_budget=600
|
||||||
|
|
||||||
|
# Lowering udp conntrack timeout to minimum
|
||||||
|
net.netfilter.nf_conntrack_udp_timeout=1
|
||||||
|
net.netfilter.nf_conntrack_udp_timeout_stream=10
|
||||||
4
roles/rocky9/templates/ip_spoofing.conf.j2
Normal file
4
roles/rocky9/templates/ip_spoofing.conf.j2
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
# Активируем защиту от IP-спуфинга.
|
||||||
|
net.ipv4.conf.j2.default.rp_filter=1
|
||||||
|
net.ipv4.conf.j2.all.rp_filter = 1
|
||||||
|
net.ipv4.conf.j2.lo.rp_filter = 1
|
||||||
29
roles/rocky9/templates/kernel_tune.conf.j2
Normal file
29
roles/rocky9/templates/kernel_tune.conf.j2
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
# Отключаем отслеживание ядром нажатие специальных сочетаний клавиш
|
||||||
|
kernel.sysrq = 0
|
||||||
|
|
||||||
|
# Добавление к файлу дампа ядра PID процесса
|
||||||
|
kernel.core_uses_pid = 1
|
||||||
|
|
||||||
|
# Здесь указывается максимальное количество байт в одном сообщении при передачи их между процессами
|
||||||
|
kernel.msgmnb = 65536
|
||||||
|
# Здесь определяется максимальный размер сообщения, которое может быть отправлено от одного процесса другому.
|
||||||
|
kernel.msgmax = 65536
|
||||||
|
|
||||||
|
# Максимальный размер (в байтах) на сегменте shared memory.
|
||||||
|
kernel.shmmax = 68719476736
|
||||||
|
# Общее количество разделяемой памяти (в страницах), какое все процессы на сервере могут использовать.
|
||||||
|
kernel.shmall = 4294967296
|
||||||
|
|
||||||
|
# Лимит одновременно открытых файлов в системе
|
||||||
|
fs.file-max=1000000
|
||||||
|
|
||||||
|
# Максимальный размер буфера приема данных для всех соединений.
|
||||||
|
net.core.rmem_max=33554432
|
||||||
|
# Максимальный размер буфера передачи данных для всех соединений.
|
||||||
|
net.core.wmem_max=33554432
|
||||||
|
# Размер буфера приема данных по умолчанию для всех соединений.
|
||||||
|
net.core.rmem_default=8388608
|
||||||
|
# Размер буфера передачи данных по умолчанию для всех соединений.
|
||||||
|
net.core.wmem_default=4194394
|
||||||
|
# Максимальный размер буфера приема данных для всех соединений.
|
||||||
|
net.core.optmem_max=40960
|
||||||
7
roles/rocky9/templates/nginx.repo.j2
Normal file
7
roles/rocky9/templates/nginx.repo.j2
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[nginx-stable]
|
||||||
|
name=Nginx Stable Repo
|
||||||
|
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
|
||||||
|
gpgcheck=1
|
||||||
|
enabled=1
|
||||||
|
gpgkey=https://nginx.org/keys/nginx_signing.key
|
||||||
|
module_hotfixes=true
|
||||||
1
roles/rocky9/templates/permitrootlogin.conf.j2
Normal file
1
roles/rocky9/templates/permitrootlogin.conf.j2
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
PermitRootLogin no
|
||||||
2
roles/rocky9/templates/prompt.sh.j2
Normal file
2
roles/rocky9/templates/prompt.sh.j2
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
#!/bin/bash
|
||||||
|
export PS1="\[\e[31m\][\[\e[m\]\[\e[31m\]\t\[\e[m\]\[\e[31m\]]\[\e[m\][\[\e[37;40m\]\u\[\e[m\]@\[\e[37m\]\H\[\e[m\]][\[\e[36m\]\w\[\e[m\]]\\$ "
|
||||||
84
roles/rocky9/templates/tcp_tune.conf.j2
Normal file
84
roles/rocky9/templates/tcp_tune.conf.j2
Normal file
|
|
@ -0,0 +1,84 @@
|
||||||
|
# TCP syncookies - технология, позволяющая не забивать
|
||||||
|
# TCP стек, пока TCP сессия полностью не установится.
|
||||||
|
# Защита на случай TCP Syn атак
|
||||||
|
# Согласно рекомендациям разработчиков ядра, этот режим лучше отключить.
|
||||||
|
# http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
|
||||||
|
net.ipv4.tcp_syncookies = 0
|
||||||
|
|
||||||
|
# Векторная (минимум, по умолчанию, максимум) переменная в файле 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 пакетов
|
||||||
|
net.ipv4.tcp_rmem=4096 8388608 16777216
|
||||||
|
# На передачу TCP пакетов
|
||||||
|
net.ipv4.tcp_wmem=4096 4194394 16777216
|
||||||
|
# Для TCP протокола в целом
|
||||||
|
net.ipv4.tcp_mem=8388608 12582912 16777216
|
||||||
|
# Для UDP протокола в целом
|
||||||
|
net.ipv4.udp_mem=8388608 12582912 16777216
|
||||||
|
net.ipv4.udp_rmem_min=16384
|
||||||
|
net.ipv4.udp_wmem_min=16384
|
||||||
|
# Параметр определяет максимальное количество пакетов в очереди на обработку, если интерфейс получает пакеты быстрее, чем ядро может их обработать.
|
||||||
|
net.core.netdev_max_backlog=500000
|
||||||
|
# Максимальное число запоминаемых запросов на соединение (TCP Syn), для которых не было получено подтверждения от подключающегося клиента.
|
||||||
|
net.ipv4.tcp_max_syn_backlog=5480000
|
||||||
|
# Увеличим возможное количество сокетов в состоянии TIME_WAIT.
|
||||||
|
net.ipv4.tcp_max_tw_buckets=5480000
|
||||||
|
# Разрешаем повторное использование TIME-WAIT сокетов в случаях, если протокол считает это безопасным.
|
||||||
|
net.ipv4.tcp_tw_reuse=1
|
||||||
|
# Разрешаем быструю утилизацию сокетов находящихся в состоянии TIME_WAIT
|
||||||
|
net.ipv4.tcp_tw_recycle=1
|
||||||
|
# Параметр tcp_fin_timeout определяет время сохранения сокета в состоянии FIN-WAIT-2 после его закрытия локальной стороной.
|
||||||
|
# Партнер может не закрыть это соединение никогда.
|
||||||
|
net.ipv4.tcp_fin_timeout=3
|
||||||
|
# Разрешить выборочные подтверждения протокола TCP. Опция необходима для эффективного использования всей доступной
|
||||||
|
# пропускной способности некоторых сетей
|
||||||
|
net.ipv4.tcp_sack=1
|
||||||
|
# Число попыток повтора передачи пакетов SYNACK для пассивных соединений TCP.
|
||||||
|
net.ipv4.tcp_synack_retries=1
|
||||||
|
# Определяет максимальное число допустимых в системе сокетов TCP, не связанных каким-либо идентификатором пользовательского файла (user file handle).
|
||||||
|
net.ipv4.tcp_max_orphans=65536
|
||||||
|
# Определяется число неудачных попыток, после которого уничтожается соединение TCP, закрытое на локальной стороне.
|
||||||
|
net.ipv4.tcp_orphan_retries=0
|
||||||
|
# Проверка наличия подключения по средствам keepalive сообщений. Активируется только для тех сокетов, которые были созданы с флагом SO_KEEPALIVE.
|
||||||
|
# Через какой промежуток времени после установки подключения начать слать keepalive сообщения (в сек)
|
||||||
|
net.ipv4.tcp_keepalive_time=600
|
||||||
|
# Интервал, с которым слать keepalive пакеты (в сек)
|
||||||
|
net.ipv4.tcp_keepalive_intvl=20
|
||||||
|
# После скольки неудачных пробах считать соединение разорванным
|
||||||
|
net.ipv4.tcp_keepalive_probes=2
|
||||||
|
# Запрещаем технологию slow start (малый размер окна) в TCP подключениях,
|
||||||
|
# в которых долгое время не было трафика.
|
||||||
|
net.ipv4.tcp_slow_start_after_idle=0
|
||||||
|
# Увеличиваем диапазон локальных портов, доступных для установки исходящих подключений.
|
||||||
|
net.ipv4.ip_local_port_range=2000 65000
|
||||||
|
# Разрешает временные метки протокола TCP. Их наличие позволяет управлять работой протокола в условиях серьезных нагрузок.
|
||||||
|
net.ipv4.tcp_timestamps=1
|
||||||
|
# Параметр отвечающий за алгоритмы сегментации TCP пакетов при передаче данных.
|
||||||
|
# Cubic - алгоритм для высоконагруженных систем, но более структурированный, нежели BIC.
|
||||||
|
# Включён по умолчанию в linux ядре начиная с версии 2.6.19
|
||||||
|
# BBR - Алгоритм от Гугла, получайте максимальную скорость, если у вас широкий канал
|
||||||
|
net.ipv4.tcp_congestion_control=bbr
|
||||||
|
# Параметр определяет дисциплину обработки очередей
|
||||||
|
# FQ делят пропускную способность между всеми соединениями, даёт лучшую пропускную способность в связке с BBR
|
||||||
|
sysctl net.core.default_qdisc=fq
|
||||||
|
# Не сохранять результаты измерений TCP соединения в кеше при его закрытии
|
||||||
|
net.ipv4.tcp_no_metrics_save=1
|
||||||
|
# Разрешаем динамическое изменение размера окна TCP стека (окно увеличивается, если не было потерь
|
||||||
|
# пакетов при передаче в рамках TCP подключения)
|
||||||
|
net.ipv4.tcp_window_scaling=1
|
||||||
|
# Защита от TIME_WAIT атак.
|
||||||
|
net.ipv4.tcp_rfc1337=1
|
||||||
|
# Не отвечаем на ICMP ECHO запросы, переданные на широковещательный адрес.
|
||||||
|
net.ipv4.icmp_echo_ignore_broadcasts=1
|
||||||
|
# Не отвечаем на ошибочно сформированные сообщения.
|
||||||
|
net.ipv4.icmp_ignore_bogus_error_responses=1
|
||||||
|
# Максимальное число открытых сокетов, ждущих соединения.
|
||||||
|
# Максимум в CentOS 7
|
||||||
|
net.core.somaxconn=65535
|
||||||
2
roles/rocky9/vars/main.yml
Normal file
2
roles/rocky9/vars/main.yml
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
---
|
||||||
|
ignored_interfaces: [lo, docker0, vbr0]
|
||||||
12
roles/root-cert/files/root_ca.crt
Normal file
12
roles/root-cert/files/root_ca.crt
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIBwzCCAWmgAwIBAgIQDeapQ/wjM1yz/QRwwRT0mTAKBggqhkjOPQQDAjBAMRow
|
||||||
|
GAYDVQQKExFjYS5sb2NhbC5tcndoby5ydTEiMCAGA1UEAxMZY2EubG9jYWwubXJ3
|
||||||
|
aG8ucnUgUm9vdCBDQTAeFw0yNDA3MjcxNjAxNDVaFw0zNDA3MjUxNjAxNDVaMEAx
|
||||||
|
GjAYBgNVBAoTEWNhLmxvY2FsLm1yd2hvLnJ1MSIwIAYDVQQDExljYS5sb2NhbC5t
|
||||||
|
cndoby5ydSBSb290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnC2HB5Ih
|
||||||
|
Ik8SgmL2ASqCWZlec6wYsjdM7uXQMVZgErAuBbGNyXvOXnM71QZb0NialIERZGkQ
|
||||||
|
/JH9vsocyt4fCKNFMEMwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8C
|
||||||
|
AQEwHQYDVR0OBBYEFFkP/3WZpLIWdD1+jsSWQiw5jfc3MAoGCCqGSM49BAMCA0gA
|
||||||
|
MEUCIQCt4C/qQvafzwA6ZRwUZ61RT4mFFQDCD+Lj7elYZ0lAQQIga4bQ2+BKP0ph
|
||||||
|
Kmj5a1Ngvep96WCg/j1jRNE/JR8mbv4=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
27
roles/root-cert/meta/main.yml
Normal file
27
roles/root-cert/meta/main.yml
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
galaxy_info:
|
||||||
|
author: mrwho
|
||||||
|
description: This role will install the Root CA Certificate on the target hosts
|
||||||
|
company: Gametize
|
||||||
|
|
||||||
|
license: MIT
|
||||||
|
|
||||||
|
min_ansible_version: 2.0
|
||||||
|
|
||||||
|
platforms:
|
||||||
|
- name: EL
|
||||||
|
versions:
|
||||||
|
- 6
|
||||||
|
- 7
|
||||||
|
- 8
|
||||||
|
- 9
|
||||||
|
- 10
|
||||||
|
- name: Ubuntu
|
||||||
|
versions:
|
||||||
|
- trusty
|
||||||
|
- xenial
|
||||||
|
- bookworm
|
||||||
|
- trixie
|
||||||
|
galaxy_tags:
|
||||||
|
- ssl
|
||||||
|
|
||||||
|
dependencies: []
|
||||||
26
roles/root-cert/tasks/darwin.yml
Normal file
26
roles/root-cert/tasks/darwin.yml
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
---
|
||||||
|
- set_fact:
|
||||||
|
install_root_cert_tmp_path: "{{ install_root_cert_tmp_folder }}/{{ install_root_cert_pem | basename }}"
|
||||||
|
|
||||||
|
- block:
|
||||||
|
- name: Copy certificate to temporary location
|
||||||
|
copy:
|
||||||
|
src: "{{ install_root_cert_pem }}"
|
||||||
|
dest: "{{ install_root_cert_tmp_path }}"
|
||||||
|
|
||||||
|
- name: Add certificate to Mac OS keychain
|
||||||
|
command: security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" "{{ install_root_cert_tmp_path }}"
|
||||||
|
|
||||||
|
# - name: Add certificate to Mac OS (openssl)
|
||||||
|
# copy:
|
||||||
|
# src: "{{ install_root_cert_pem }}"
|
||||||
|
# dest: "/usr/local/etc/openssl/certs/{{ install_root_cert_pem | basename }}"
|
||||||
|
# owner: root
|
||||||
|
# group: wheel
|
||||||
|
# mode: "0644"
|
||||||
|
|
||||||
|
always:
|
||||||
|
- name: Remove temporary certificate
|
||||||
|
file:
|
||||||
|
path: "{{ install_root_cert_tmp_path }}"
|
||||||
|
state: absent
|
||||||
16
roles/root-cert/tasks/debian.yml
Normal file
16
roles/root-cert/tasks/debian.yml
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
- name: Make sure the folder exists (Debian, Ubuntu)
|
||||||
|
file:
|
||||||
|
path: /usr/local/share/ca-certificates
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
# Note that the .crt is actually a .pem renamed
|
||||||
|
- name: Copy the certificate (Debian, Ubuntu)
|
||||||
|
copy:
|
||||||
|
src: "{{ install_root_cert_pem }}"
|
||||||
|
dest: "/usr/local/share/ca-certificates/{{ install_root_cert_pem | basename }}.crt"
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Update CA Trust (Debian, Ubuntu)
|
||||||
|
command: update-ca-certificates
|
||||||
|
when: result is changed
|
||||||
15
roles/root-cert/tasks/main.yml
Normal file
15
roles/root-cert/tasks/main.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
#- name: Check that the root certificate exists
|
||||||
|
# become: no
|
||||||
|
# local_action: "stat path={{ install_root_cert_pem }}"
|
||||||
|
# register: result
|
||||||
|
# failed_when: not result.stat.exists
|
||||||
|
|
||||||
|
- include: debian.yml
|
||||||
|
when: ansible_os_family == "Debian"
|
||||||
|
|
||||||
|
- include: red_hat.yml
|
||||||
|
when: ansible_os_family == "RedHat"
|
||||||
|
|
||||||
|
- include: darwin.yml
|
||||||
|
when: ansible_os_family == "Darwin"
|
||||||
21
roles/root-cert/tasks/red_hat.yml
Normal file
21
roles/root-cert/tasks/red_hat.yml
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
---
|
||||||
|
- name: Make sure the folder exists (Red Hat)
|
||||||
|
file:
|
||||||
|
path: /etc/pki/ca-trust/source/anchors
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: Copy PEM into folder (Red Hat)
|
||||||
|
copy:
|
||||||
|
src: "{{ install_root_cert_pem }}"
|
||||||
|
dest: "/etc/pki/ca-trust/source/anchors/{{ install_root_cert_pem | basename }}"
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Update CA Trust (Red Hat)
|
||||||
|
command: update-ca-trust
|
||||||
|
when: result is changed
|
||||||
|
|
||||||
|
- name: Update CA Trust (Red Hat < 7)
|
||||||
|
command: update-ca-trust enable
|
||||||
|
when:
|
||||||
|
- result is changed
|
||||||
|
- ansible_distribution_version|int < 7
|
||||||
6
roles/root-cert/templates/server.py
Normal file
6
roles/root-cert/templates/server.py
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
import BaseHTTPServer, SimpleHTTPServer
|
||||||
|
import ssl
|
||||||
|
|
||||||
|
httpd = BaseHTTPServer.HTTPServer(('0.0.0.0', 443), SimpleHTTPServer.SimpleHTTPRequestHandler)
|
||||||
|
httpd.socket = ssl.wrap_socket (httpd.socket, certfile='{{ certfile_pem }}', server_side=True)
|
||||||
|
httpd.serve_forever()
|
||||||
105
roles/root-cert/tests/.gitlab-ci.yml
Normal file
105
roles/root-cert/tests/.gitlab-ci.yml
Normal file
|
|
@ -0,0 +1,105 @@
|
||||||
|
### Environments
|
||||||
|
|
||||||
|
test_centos7:
|
||||||
|
<<: *test_definition
|
||||||
|
variables:
|
||||||
|
DOCKER_IMAGE: geerlingguy/docker-centos7-ansible:latest
|
||||||
|
DOCKER_INIT: /usr/lib/systemd/systemd
|
||||||
|
DOCKER_RUN_OPTS: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
|
||||||
|
DOCKER_NAME: "gitlab-ci-$CI_BUILD_ID-$CI_BUILD_REF"
|
||||||
|
PLAYBOOK_EXTRA_VARS: ""
|
||||||
|
|
||||||
|
test_centos6:
|
||||||
|
<<: *test_definition
|
||||||
|
variables:
|
||||||
|
DOCKER_IMAGE: geerlingguy/docker-centos6-ansible:latest
|
||||||
|
DOCKER_INIT: /sbin/init
|
||||||
|
DOCKER_RUN_OPTS: ""
|
||||||
|
DOCKER_NAME: "gitlab-ci-$CI_BUILD_ID-$CI_BUILD_REF"
|
||||||
|
PLAYBOOK_EXTRA_VARS: ""
|
||||||
|
|
||||||
|
test_ubuntu1604:
|
||||||
|
<<: *test_definition
|
||||||
|
variables:
|
||||||
|
DOCKER_IMAGE: geerlingguy/docker-ubuntu1604-ansible:latest
|
||||||
|
DOCKER_INIT: /lib/systemd/systemd
|
||||||
|
DOCKER_RUN_OPTS: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
|
||||||
|
DOCKER_NAME: "gitlab-ci-$CI_BUILD_ID-$CI_BUILD_REF"
|
||||||
|
PLAYBOOK_EXTRA_VARS: ""
|
||||||
|
|
||||||
|
test_ubuntu1404:
|
||||||
|
<<: *test_definition
|
||||||
|
variables:
|
||||||
|
DOCKER_IMAGE: geerlingguy/docker-ubuntu1404-ansible:latest
|
||||||
|
DOCKER_INIT: /sbin/init
|
||||||
|
DOCKER_RUN_OPTS: ""
|
||||||
|
DOCKER_NAME: gitlab-ci-$CI_BUILD_ID-$CI_BUILD_REF
|
||||||
|
PLAYBOOK_EXTRA_VARS: ""
|
||||||
|
|
||||||
|
test_centos7_system_pip:
|
||||||
|
<<: *test_definition
|
||||||
|
variables:
|
||||||
|
DOCKER_IMAGE: geerlingguy/docker-centos7-ansible:latest
|
||||||
|
DOCKER_INIT: /usr/lib/systemd/systemd
|
||||||
|
DOCKER_RUN_OPTS: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
|
||||||
|
DOCKER_NAME: gitlab-ci-$CI_BUILD_ID-$CI_BUILD_REF
|
||||||
|
PLAYBOOK_EXTRA_VARS: --extra-vars "aws_sdk_pip_use_package_manager=true"
|
||||||
|
|
||||||
|
test_centos6_system_pip:
|
||||||
|
<<: *test_definition
|
||||||
|
variables:
|
||||||
|
DOCKER_IMAGE: geerlingguy/docker-centos6-ansible:latest
|
||||||
|
DOCKER_INIT: /sbin/init
|
||||||
|
DOCKER_RUN_OPTS: ""
|
||||||
|
DOCKER_NAME: gitlab-ci-$CI_BUILD_ID-$CI_BUILD_REF
|
||||||
|
PLAYBOOK_EXTRA_VARS: --extra-vars "aws_sdk_pip_use_package_manager=true"
|
||||||
|
|
||||||
|
test_ubuntu1604_system_pip:
|
||||||
|
<<: *test_definition
|
||||||
|
variables:
|
||||||
|
DOCKER_IMAGE: geerlingguy/docker-ubuntu1604-ansible:latest
|
||||||
|
DOCKER_INIT: /lib/systemd/systemd
|
||||||
|
DOCKER_RUN_OPTS: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
|
||||||
|
DOCKER_NAME: gitlab-ci-$CI_BUILD_ID-$CI_BUILD_REF
|
||||||
|
PLAYBOOK_EXTRA_VARS: --extra-vars "aws_sdk_pip_use_package_manager=true"
|
||||||
|
|
||||||
|
test_ubuntu1404_system_pip:
|
||||||
|
<<: *test_definition
|
||||||
|
variables:
|
||||||
|
DOCKER_IMAGE: geerlingguy/docker-ubuntu1404-ansible:latest
|
||||||
|
DOCKER_INIT: /sbin/init
|
||||||
|
DOCKER_RUN_OPTS: ""
|
||||||
|
DOCKER_NAME: gitlab-ci-$CI_BUILD_ID-$CI_BUILD_REF
|
||||||
|
PLAYBOOK_EXTRA_VARS: --extra-vars "aws_sdk_pip_use_package_manager=true"
|
||||||
|
|
||||||
|
### Test template
|
||||||
|
|
||||||
|
.test_template: &test_definition
|
||||||
|
variables:
|
||||||
|
- DOCKER_NAME: "gitlab-ci-$CI_BUILD_ID-$CI_BUILD_REF"
|
||||||
|
before_script:
|
||||||
|
- docker pull $DOCKER_IMAGE
|
||||||
|
script:
|
||||||
|
- docker run --detach --volume="${PWD}":/etc/ansible/roles/role_under_test:ro --name $DOCKER_NAME $DOCKER_RUN_OPTS $DOCKER_IMAGE $DOCKER_INIT
|
||||||
|
# Ansible sytax check
|
||||||
|
- docker exec $DOCKER_NAME ansible-playbook $PLAYBOOK_EXTRA_VARS /etc/ansible/roles/role_under_test/tests/test.yml --syntax-check
|
||||||
|
# Test role
|
||||||
|
- docker exec $DOCKER_NAME ansible-playbook $PLAYBOOK_EXTRA_VARS /etc/ansible/roles/role_under_test/tests/test.yml
|
||||||
|
# Test role idempotence
|
||||||
|
- idempotence=$(mktemp)
|
||||||
|
- docker exec $DOCKER_NAME ansible-playbook $PLAYBOOK_EXTRA_VARS /etc/ansible/roles/role_under_test/tests/test.yml | tee -a ${idempotence}
|
||||||
|
- >
|
||||||
|
tail ${idempotence}
|
||||||
|
| grep -q 'changed=0.*failed=0'
|
||||||
|
&& (echo 'Idempotence test: pass' && exit 0)
|
||||||
|
|| (echo 'Idempotence test: fail' && exit 1)
|
||||||
|
# Test role
|
||||||
|
- docker exec $DOCKER_NAME sh -c 'echo import boto3 > test.py && python test.py'
|
||||||
|
after_script:
|
||||||
|
- docker kill $DOCKER_NAME
|
||||||
|
- docker rm $DOCKER_NAME
|
||||||
|
|
||||||
|
### Stages/ Jobs Section
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- test
|
||||||
31
roles/root-cert/tests/files/localhost.pem
Normal file
31
roles/root-cert/tests/files/localhost.pem
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICjjCCAfcCCQDEUcxgOWKv1DANBgkqhkiG9w0BAQsFADCBjTELMAkGA1UEBhMC
|
||||||
|
U0cxEjAQBgNVBAgTCVNpbmdhcG9yZTESMBAGA1UEBxMJU2luZ2Fwb3JlMRQwEgYD
|
||||||
|
VQQKEwtFeGFtcGxlIEluYzEqMCgGA1UECxMhRXhhbXBsZSBJbmMgQ2VydGlmaWNh
|
||||||
|
dGUgQXV0aG9yaXR5MRQwEgYDVQQDEwtleGFtcGxlLmNvbTAeFw0xNjEyMjAwODQy
|
||||||
|
MDFaFw0xOTEwMTAwODQyMDFaMIGIMQswCQYDVQQGEwJTRzESMBAGA1UECBMJU2lu
|
||||||
|
Z2Fwb3JlMRIwEAYDVQQHEwlTaW5nYXBvcmUxFDASBgNVBAoTC0V4YW1wbGUgSW5j
|
||||||
|
MScwJQYDVQQLEx5FeGFtcGxlIEluYyBUZXN0aW5nIERlcGFydG1lbnQxEjAQBgNV
|
||||||
|
BAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwC6+t0FO
|
||||||
|
Q6TLsFnihFemVh7fkezoL3Mnyjbr5Z83f+T9y7GO0CHtHWU9gFEufnztLwiKM7iB
|
||||||
|
TZob4CReOIFZC+sd790ScWeSwc319FQ9ZVVdOyRD4FYZ8nU5+t6iiY/Cg9PUCHYy
|
||||||
|
eyahySlBYIcoR1DvtmnUAi0Bd0DPgAppoW8CAwEAATANBgkqhkiG9w0BAQsFAAOB
|
||||||
|
gQDqcOoCmkori7CXraHt8Tsy2CS9LsJBAHXxqAIQp9Bz5LHprgN2j9pvpnlzVBp5
|
||||||
|
ASMsUqLcgHlt3dtPCCkLL9quJLw2VvB3PI9WFWhY2qu/qsgVaZvxYe2jto/6M6oz
|
||||||
|
Vj5rtJgauo82gX9COafluiJqbBuJQsPRjUXZkUDUoMjIUA==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIICXAIBAAKBgQDALr63QU5DpMuwWeKEV6ZWHt+R7OgvcyfKNuvlnzd/5P3LsY7Q
|
||||||
|
Ie0dZT2AUS5+fO0vCIozuIFNmhvgJF44gVkL6x3v3RJxZ5LBzfX0VD1lVV07JEPg
|
||||||
|
VhnydTn63qKJj8KD09QIdjJ7JqHJKUFghyhHUO+2adQCLQF3QM+ACmmhbwIDAQAB
|
||||||
|
AoGBAIP1lO6v4NWBqnsEvQyyQnyP5mOEkElEgOXQoFmi4bDnw3zCBpXTNcUhZwFc
|
||||||
|
vNgNX68T5hFtdxuZ3doiHrAd4M2jaVh1AWNau3KJLRCer56s6XKkQGEUGhRKbvjj
|
||||||
|
mSRHgERZzIZWkn5cs4Itt7nDfN1GTB5Wy87PRL+OH/Zs8syBAkEA+jZ6Kyc6TgkQ
|
||||||
|
SB/QJg8OTRpaYzSuqNkjqjofWBhOzsi1gAxH4tdhpAmWl1zkK4n0sck+ZCX2nK6P
|
||||||
|
MbdmT/v3BwJBAMSgqv91kSSO8Vk85SvzGXm4QO6k8Nfss3XrrVzXGTVeC4coR9En
|
||||||
|
vCvinVT84fdGNXoBWdTs3TdIrFUAf/a5QFkCQDc+q/63LJJqQeQK0iR1Eo1Hkklx
|
||||||
|
KlcxikRdjOogg9X4Tsq063JUZ8SWMV++LMrILPTMIDBwiWDS0d8CRV7HnSUCQEdU
|
||||||
|
vhQEs43eqWGlPMIv47sLg8rPXWwHu6b4w6Cdi9CXeHkkvMD8uD/3avos71DEUJwd
|
||||||
|
J1ieQTZQD+yaTNHVrKkCQBNDOqKjIYGLJPbYCC+cOwcSmHTlOcT+tzVgTa1suGSt
|
||||||
|
dbAZ7O7PQLCCH0YSPIJvfH5/1L7TtN6ZXDvUPGUjnas=
|
||||||
|
-----END RSA PRIVATE KEY-----
|
||||||
13
roles/root-cert/tests/files/py-httpd.py
Normal file
13
roles/root-cert/tests/files/py-httpd.py
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
# A simple script will that will serve files thru HTTPS,
|
||||||
|
# based on the directory which it's run from.
|
||||||
|
|
||||||
|
import BaseHTTPServer, SimpleHTTPServer
|
||||||
|
import ssl
|
||||||
|
import os
|
||||||
|
|
||||||
|
dir = os.path.dirname(__file__)
|
||||||
|
filename = os.path.join(dir, 'localhost.pem')
|
||||||
|
|
||||||
|
httpd = BaseHTTPServer.HTTPServer(('0.0.0.0', 443), SimpleHTTPServer.SimpleHTTPRequestHandler)
|
||||||
|
httpd.socket = ssl.wrap_socket (httpd.socket, certfile=filename, server_side=True)
|
||||||
|
httpd.serve_forever()
|
||||||
22
roles/root-cert/tests/files/root_ca.pem
Normal file
22
roles/root-cert/tests/files/root_ca.pem
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIDkDCCAvmgAwIBAgIJAMPuDvEyWkWBMA0GCSqGSIb3DQEBCwUAMIGNMQswCQYD
|
||||||
|
VQQGEwJTRzESMBAGA1UECBMJU2luZ2Fwb3JlMRIwEAYDVQQHEwlTaW5nYXBvcmUx
|
||||||
|
FDASBgNVBAoTC0V4YW1wbGUgSW5jMSowKAYDVQQLEyFFeGFtcGxlIEluYyBDZXJ0
|
||||||
|
aWZpY2F0ZSBBdXRob3JpdHkxFDASBgNVBAMTC2V4YW1wbGUuY29tMB4XDTE2MTIy
|
||||||
|
MDA4NDEzOVoXDTE5MTAxMDA4NDEzOVowgY0xCzAJBgNVBAYTAlNHMRIwEAYDVQQI
|
||||||
|
EwlTaW5nYXBvcmUxEjAQBgNVBAcTCVNpbmdhcG9yZTEUMBIGA1UEChMLRXhhbXBs
|
||||||
|
ZSBJbmMxKjAoBgNVBAsTIUV4YW1wbGUgSW5jIENlcnRpZmljYXRlIEF1dGhvcml0
|
||||||
|
eTEUMBIGA1UEAxMLZXhhbXBsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
|
||||||
|
AoGBAPX9HdMy6ACFzuFex3HrILoTUHEymHaMRz711kqxivMPh4D5QDODMTCNHS7K
|
||||||
|
qPfoQIv4Ci0LioHNogeXOSp7mMorM+9IBlUEuA3m5k6+i9tHFbfUa0Nw50SzpiD3
|
||||||
|
hLY5HFd3PcmMgHgtaw1TFOHm+3ksOMW7cnn7R/lo2LNxfR5XAgMBAAGjgfUwgfIw
|
||||||
|
HQYDVR0OBBYEFGB5QV3mg/Rxq4o8EA2rnfMpQtLDMIHCBgNVHSMEgbowgbeAFGB5
|
||||||
|
QV3mg/Rxq4o8EA2rnfMpQtLDoYGTpIGQMIGNMQswCQYDVQQGEwJTRzESMBAGA1UE
|
||||||
|
CBMJU2luZ2Fwb3JlMRIwEAYDVQQHEwlTaW5nYXBvcmUxFDASBgNVBAoTC0V4YW1w
|
||||||
|
bGUgSW5jMSowKAYDVQQLEyFFeGFtcGxlIEluYyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
|
||||||
|
dHkxFDASBgNVBAMTC2V4YW1wbGUuY29tggkAw+4O8TJaRYEwDAYDVR0TBAUwAwEB
|
||||||
|
/zANBgkqhkiG9w0BAQsFAAOBgQDPkWryqf6tBKXJudIEu3h1nehv7XCCcSH9Fr/I
|
||||||
|
dME8bwYrMiqGZfmjeaZf8S0eHd8a3scDo5D5NiLZh9va2POkDejBh/MDUQpDx06V
|
||||||
|
9XMCAa7aAFzvuoPyzCO1N95buhaVANLUkjVSTaPkTkZrsnE65Ot6KbClT4DxZvLE
|
||||||
|
dhqjnQ==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
1
roles/root-cert/tests/localhost
Normal file
1
roles/root-cert/tests/localhost
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
localhost ansible_connection=local
|
||||||
7
roles/root-cert/tests/test.yml
Normal file
7
roles/root-cert/tests/test.yml
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: yes
|
||||||
|
vars:
|
||||||
|
install_root_cert_pem: files/root_ca.pem
|
||||||
|
roles:
|
||||||
|
- role_under_test
|
||||||
48
roles/root-cert/tests/test_vagrant.yml
Normal file
48
roles/root-cert/tests/test_vagrant.yml
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: yes
|
||||||
|
vars:
|
||||||
|
install_root_cert_pem: files/testing_root_cert.pem
|
||||||
|
|
||||||
|
#roles:
|
||||||
|
# - install-root-cert
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Copy SSL certificate
|
||||||
|
become: yes
|
||||||
|
copy:
|
||||||
|
src: "files/{{ ansible_fqdn }}.pem"
|
||||||
|
dest: "/opt/{{ ansible_fqdn }}.pem"
|
||||||
|
owner: root
|
||||||
|
mode: 0600
|
||||||
|
|
||||||
|
- name: Copy server.py
|
||||||
|
become: yes
|
||||||
|
template:
|
||||||
|
src: files/py-httpd.py.j2
|
||||||
|
dest: /opt/py-httpd.py
|
||||||
|
owner: root
|
||||||
|
mode: 755
|
||||||
|
|
||||||
|
- name: Copy systemd script for py-httpd.py
|
||||||
|
become: yes
|
||||||
|
copy:
|
||||||
|
src: files/py-httpd.service
|
||||||
|
dest: /etc/systemd/system/py-httpd.service
|
||||||
|
owner: root
|
||||||
|
mode: 0755
|
||||||
|
|
||||||
|
- name: Reload systemd
|
||||||
|
become: yes
|
||||||
|
command: systemctl daemon-reload
|
||||||
|
|
||||||
|
- name: Start py-httpd.service
|
||||||
|
become: yes
|
||||||
|
service:
|
||||||
|
name: py-httpd
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
|
- get_url:
|
||||||
|
url: "https://{{ ansible_fqdn }}"
|
||||||
|
dest: .
|
||||||
26
roles/root-cert/tests/test_with_webserver.yml
Normal file
26
roles/root-cert/tests/test_with_webserver.yml
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: yes
|
||||||
|
tasks:
|
||||||
|
- name: Install curl (Debian)
|
||||||
|
apt:
|
||||||
|
name: curl
|
||||||
|
state: present
|
||||||
|
update_cache: yes
|
||||||
|
cache_valid_time: 3600
|
||||||
|
when: ansible_os_family == 'Debian'
|
||||||
|
|
||||||
|
- name: Install curl (RedHat)
|
||||||
|
yum:
|
||||||
|
name: curl
|
||||||
|
state: present
|
||||||
|
when: ansible_os_family == 'RedHat'
|
||||||
|
|
||||||
|
- name: Copy server script and certificate
|
||||||
|
copy:
|
||||||
|
src: "{{ item }}"
|
||||||
|
dest: /opt/
|
||||||
|
mode: 0600
|
||||||
|
with_items:
|
||||||
|
- files/localhost.pem
|
||||||
|
- files/py-httpd.py
|
||||||
2
roles/root-cert/vars/main.yml
Normal file
2
roles/root-cert/vars/main.yml
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
---
|
||||||
|
install_root_cert_tmp_folder: /tmp
|
||||||
Loading…
Reference in a new issue