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