dudaENV Logo
  • Я так же продублирую полные файлы в Приложение 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

18.png

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

19.png

19.png

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

20.png

20.png

Файл dhcpd.conf.j2:

21.png

21.png

Файл nginx.conf.j2:

22.png

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
Автор: Maksim Duda