- Я так же продублирую полные файлы в Приложение 2 приложу полный плейбук.
На ЦОД Альт Виртуализация установлю ansible:
# apt-get update -y && apt-get install ansible -y
Установлю недостающий модуль для работы с ufw:
# ansible-galaxy collection install community.general
Далее отредактирую файл /etc/ansible/ansible.cfg раскоментирую и добавлю строки:
inventory = /etc/ansible/inventory
host_key_cheking = False
Отредактирую файл /etc/ansible/hosts чтобы внести параметры подключения к хостам:

18.png
Создам директорию а в ней создам и отредактирую файл, в котором опишу общие настройки для всех хостов /etc/ansible/group_vars/it-planet:

19.png
Создам директорию а в ней файлы, эти файлы нужны для того чтобы использовать их как шаблоны конфиг файлов для хостов:

20.png
Файл dhcpd.conf.j2:

21.png
Файл nginx.conf.j2:

22.png
Теперь основной плейбук, который будет выполнять все действия по заданию. Первое что сделаю это создам сценарий для сервера:
---
- name: Cofigure Alt Network(DHCP, Nginx, UFW, Samba+Bind)
hosts: server
become: yes
tasks:
Далее обновлю пакеты, установлю dhcp, скопирую конфиг из шаблона, укажу какой интерфейс будет раздавать айпи, запущу и добавлю в автозагрузку:
- name: Update package
apt_rpm:
update_cache: yes
changed_when: false
- name: Install dhcp-server
apt_rpm:
pkg: dhcp-server
state: present
changed_when: false
- name: Copy dhcpd.conf
template:
src: templates/dhcpd.conf.j2
dest: /etc/dhcp/dhcpd.conf
changed_when: false
- name: Configure dhcp
copy:
dest: /etc/sysconfig/dhcpd
content: 'DHCPD_IFACES="enp6s19"'
changed_when: false
- name: Starting dhcp
service:
name: dhcpd
state: restarted
enabled: yes
changed_when: false
После настройки dhcp разверну простой сайт на Nginx, установлю пакет, создам директорию, где будет сайт, настрою конфиг файл из шаблона, создам тестовую страницу, запущу Nginx и добавлю в автозагрузку:
- name: Install nginx
apt_rpm:
pkg: nginx
state: present
changed_when: false
- name: Create folderl for site
file:
path: "/var/{{ item.path1 }}/{{ item.path2 }}"
state: directory
loop:
- { path1: "www" , path2: "html" }
changed_when: false
- name: Create config for site
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/sites-available.d/it-planet.conf
changed_when: false
- name: Create test site
copy:
dest: "/var/www/html/index.html"
content: |
<html>
<body>
<center><h1>WEB</h1></center>
</body>
</html>
changed_when: false
- name: Enable test site
file:
src: /etc/nginx/sites-available.d/it-planet.conf
dest: /etc/nginx/sites-enabled.d/it-planet.conf
state: link
changed_when: false
- name: Start test site
service:
name: nginx
state: restarted
enabled: yes
changed_when: false
Чтобы поднять домен с ДНС я установлю samba и bind, далее сделаю все необходимые настройки конфиг файлов чтобы они работали в связке(и да в конце два раза добавляется в автозагрузку это в systemctl и ufw enable, если это не сделать, стартовать не будет и при проверке будет в иноактиве):
- name: Install samba+bind
apt_rpm:
pkg:
- task-samba-dc
- bind
- bind-utils
state: present
changed_when: false
- name: Stopping samba+bind
service:
name: "{{ item }}"
state: stopped
enabled: no
loop:
- bind
- samba
changed_when: false
- name: Configuring /etc/bind/options.conf
lineinfile:
path: /etc/bind/options.conf
regexp: "{{ item.old }}"
line: "{{ item.new }}"
loop:
- { old: 'listen-on { 127.0.0.1; };', new: 'listen-on { any; };' }
- { old: 'listen-on-v6 { ::1; };', new: 'listen-on-v6 { any; };' }
changed_when: false
- name: Configuring /etc/bind/options.conf
blockinfile:
path: /etc/bind/options.conf
marker: "# {mark} ANSIBLE MANAGET BLOCK - OPTIONS"
insertafter: "^options {"
block: |
forwarders { 77.88.8.8; };
allow-query { any; };
allow-transfer { none; };
tkey-gssapi-keytab "/var/lib/samba/bind-dns/dns.keytab";
minimal-responses yes;
changed_when: false
- name: Configuring /etc/bind/options.conf.
blockinfile:
path: /etc/bind/options.conf
marker: "# {mark} ANSIBLE MANAGET BLOCK - LOGGING"
insertafter: "^logging {"
block: |
category lame-servers { null; };
changed_when: false
- name: Off Chroot
command: /usr/sbin/control bind-chroot disabled
changed_when: false
- name: Configuring /etc/sysconfig/bind
lineinfile:
path: /etc/sysconfig/bind
line: 'KRB5RCACHETYPE="none"'
insertafter: EOF
changed_when: false
- name: Configuring /etc/bind/named.conf
lineinfile:
path: /etc/bind/named.conf
line: 'include "/var/lib/samba/bind-dns/named.conf";'
insertafter: EOF
changed_when: false
- name: Deleting old folders samba
file:
path: "{{ item }}"
state: absent
loop:
- /etc/samba/smb.conf
- /var/lib/samba
- /var/cache/samba
changed_when: false
- name: Create sysvol dir
file:
path: /var/lib/samba/sysvol
state: directory
owner: root
group: root
changed_when: false
- name: Change hostname
hostname:
name: server.duda.itplanet
changed_when: false
- name: Create domain
command: |
samba-tool domain provision
--realm=DUDA.ITPLANET
--domain=DUDA
--server-role=dc
--dns-backend=BIND9_DLZ
--adminpass=P@ssw0rd
--use-rfc2307
args:
creates: /var/lib/samba/private/secrets.ldb
environment:
PATH: "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
changed_when: false
- name: Configure /etc/net/ifaces/enp6s19/resolv.conf
copy:
dest: /etc/net/ifaces/enp6s19/resolv.conf
content: |
search duda.itplanet
nameserver 127.0.0.1
changed_when: false
- name: Start Samba and Bind
service:
name: "{{ item }}"
state: started
enabled: yes
loop:
- samba
- bind
changed_when: false
- name: Copy krb5.conf
copy:
src: /var/lib/samba/private/krb5.conf
dest: /etc/krb5.conf
remote_src: yes
changed_when: false
Так же нужно позаботиться о безопасности сервера, в качестве фаервола я установлю UFW, сброшу его настройки, установлю правила по правилу – «Все, что не разрешено, запрещено», далее буду разрешать необходимые порты для корректной работы сервисов включу и добавлю в автозагрузку, после перезагружу сервер:
- name: Install UFW
apt_rpm:
pkg: ufw
state: present
changed_when: false
- name: Reset UFW rules
community.general.ufw:
state: reset
changed_when: false
- name: Configure default policies
block:
- name: Set default incoming policy
community.general.ufw:
direction: incoming
policy: deny
- name: Set default outgoing policy
community.general.ufw:
direction: outgoing
policy: allow
- name: Set default routed policy
community.general.ufw:
direction: routed
policy: reject
- name: Allow SSH (TCP)
community.general.ufw:
rule: allow
port: "22"
proto: tcp
changed_when: false
- name: Allow HTTP (TCP)
community.general.ufw:
rule: allow
port: "80"
proto: tcp
changed_when: false
- name: Allow HTTPS (TCP)
community.general.ufw:
rule: allow
port: "443"
proto: tcp
changed_when: false
- name: Allow DNS (UDP)
community.general.ufw:
rule: allow
port: "53"
proto: udp
changed_when: false
- name: Allow DNS (TCP)
community.general.ufw:
rule: allow
port: "53"
proto: tcp
changed_when: false
- name: Allow DHCP (UDP)
community.general.ufw:
rule: allow
port: "67"
proto: udp
changed_when: false
- name: Allow Samba core ports (TCP)
community.general.ufw:
rule: allow
port: "{{ item }}"
proto: tcp
loop:
- "88"
- "135"
- "139"
- "389"
- "445"
- "464"
- "631"
- "636"
changed_when: false
- name: Allow Samba core ports (UDP)
community.general.ufw:
rule: allow
port: "{{ item }}"
proto: udp
loop:
- "88"
- "135"
- "139"
- "389"
- "464"
- "636"
changed_when: false
- name: Allow Samba dynamic ports (TCP)
community.general.ufw:
rule: allow
port: "32768:60999"
proto: tcp
changed_when: false
- name: Allow Samba dynamic ports (UDP)
community.general.ufw:
rule: allow
port: "32768:60999"
proto: udp
changed_when: false
- name: Enable UFW systemctl
service:
name: ufw
state: started
enabled: yes
changed_when: false
- name: Enale ufw systemctl
command: ufw --force enable
environment:
PATH: "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
changed_when: false
- name: Control reboot
ansible.builtin.reboot:
msg: Control reboot
changed_when: false
Далее создам сценарии для клиентов( клиент 1, клиент 2), в них их устанавливается пакет для ввода в домен, меняется хостнейм, перезагружается после применения хостнейма(если не сделать перезагрузку, то начнет лагать граф. оболочка), после ввожу в домен и так же перезагружаю для успешного ввода в домен:
- name: Configuring client1
hosts: client1
become: yes
tasks:
- name: Update package
apt_rpm:
update_cache: yes
changed_when: false
- name: Install package Samba
apt_rpm:
pkg: task-auth-ad-sssd
state: present
changed_when: false
- name: Switch hostname
hostname:
name: client1.duda.itplanet
changed_when: false
- name: Technical reboot
ansible.builtin.reboot:
msg: Technical reboot
changed_when: false
- name: Entering the domain
command: system-auth write ad duda.itplanet client1 duda 'administrator' 'P@ssw0rd'
environment:
PATH: "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
changed_when: false
- name: Control reboot
ansible.builtin.reboot:
msg: Control reboot
changed_when: false
- name: Configuring client2
hosts: client2
become: yes
tasks:
- name: Update package
apt_rpm:
update_cache: yes
changed_when: false
- name: Install package Samba
apt_rpm:
pkg: task-auth-ad-sssd
state: present
changed_when: false
- name: Switch hostame
hostname:
name: client2.duda.itplanet
changed_when: false
- name: Technical reboot
ansible.builtin.reboot:
msg: Technical reboot
changed_when: false
- name: Entering the domain
command: system-auth write ad duda.itplanet client2 duda 'administrator' 'P@ssw0rd'
environment:
PATH: "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
changed_when: false
- name: Control reboot
ansible.builtin.reboot:
msg: Control reboot
changed_when: false