공부합시다!/Ansible

Ansible: DHCP, VSFTPD, Nginx, DNS Infra 자동화

간서치 2023. 3. 17. 09:15
728x90

오늘은 종합실습적인 개념으로 Infra 자동화에 대해서 학습하겠습니다.

dhcp, ftp, nginx, dns infra를 자동으로 구성합니다.

 

1. 시나리오

Ansible를 활용한 Infra 자동화
1. nginx 설치(web그룹)
 1.1. web server 설치 및 구성 
 1.2. nginx
 1.3. 본인 이니설-webserver
 1.4. web contents directory: /web

2. vsftpd (was그룹)
 2.1. vsftpd 설치 및 구성
 2.2. passive mode, 인증 및 제어21, 데이터 전송 65000-65100 사용
 2.3. a,b 계정 생성 a만 chroot 적용 
 2.4. 최상위 디렉토리에 /ftp 디렉토리 생성 후 배너(배너파일이름:ban) 및 chroot, log 저장
 2.5. 접속 후 120초 동안 아무런 Action이 없으면 연결 끊기, data 전송중이라도 1분 후 연결 끊기
 2.6. 그 외 나머지는 기본 설정

3. dns (db그룹) 
 3.1. bind를 활용한 DNS
 3.2. nginx 및 vsftpd 는 도메인이름으로 접속 가능해야 합니다.
 3.3. 역방향 조회 영역 설정
 3.4. 외부 순환쿼리가 가능

# 간단한 내용 변경이 아닌 경우 미리 설정 파일을 만들어 놓고 해당 위치에 복사하는 방식으로
# dns /var/named/zone 파일 권한 변경 신경쓰세요.
팀별로 역할을 나눠서 하시고 하나로 모아서 개개별로 설정해 보세요!

 

1. vsftpd.yml

---
- name: vsftpd config
  hosts: was
  tasks:

    - name: user a, b create
      user:
        name: "{{ item }}"
        password: "{{ 'It1' | password_hash('sha512') }}"
      with_items:
        - a
        - b

    - name: vsftpd install
      dnf:
        name: vsftpd
        state: latest
    - name: /ftp direcrtory create
      file:
        path: /ftp
        state: directory
    - name: chroot copy
      copy:
        src: "{{ item.src }}"
        dest: "{{ item.dest }}"
      with_items:
        - { src: ./chroot, dest: /ftp/chroot }
        - { src: ./ban, dest: /ftp/ban }
        - { src: ./vsftpd.conf, dest: /etc/vsftpd/vsftpd.conf }
    - name: service start
      service:
        name: vsftpd
        state: started
    - name: firewall open
      firewalld:
        port: "{{ item.port }}/{{ item.pro }}"
        immediate: yes
        permanent: yes
        state: enabled
      with_items:
        - { port: 21, pro: tcp }
        - { port: 65000 - 65100, pro: tcp }

 

2. web.yml

---
- name: nignx install
  hosts: web
  tasks:

    - name: nginx install
      dnf:
        name: nginx
        state: latest
    - name: /www create
      file:
        path: /www
        state: directory
    - name: conf mv
      copy:
        src: ./nginx.conf
        dest: /etc/nginx/nginx.conf

    - name: index.hmtl
      copy:
        src: ./index.html
        dest: /www/index.html

    - name: service start
      service:
        name: nginx
        state: started

    - name: firewall open
      firewalld:
        port: 80/tcp
        immediate: yes
        permanent: yes
        state: enabled

 

3. named.yml

---
- name: DNS configuration
  hosts: db
  tasks:

    - name: bind install
      dnf:
        name: "{{ item }}"
        state: latest
      with_items:
        - bind
        - bind-utils
        - bind-libs
    - name: file copy
      copy:
        src: "{{ item.src }}"
        dest: "{{ item.dest }}"
      with_items:
        - { src: ./named.conf, dest: /etc/named.conf }
        - { src: ./named.rfc1912.zones, dest: /etc/named.rfc1912.zones }
        - { src: ./sdkim.pw, dest: /var/named/sdkim.pw }
        - { src: ./pw.sdkim, dest: /var/named/pw.sdkim }
    - name: change mod
      file:
        path: "{{ item }}"
        mode: 0644
      with_items:
        - /var/named/sdkim.pw
        - /var/named/pw.sdkim
    - name: service start
      service:
        name: named
        state: started
    - name: firewall open
      firewalld:
        port: "53/{{ item }}"
        immediate: yes
        permanent: yes
        state: enabled
      with_items:
        - udp
        - tcp

 

4. 설정 파일

 4.1. /etc/named.conf

 4.2. /etc/named.rfc1912.zones

 4.3. sdkim.pw (정방향 조회 영역)

 4.4. pw.sdkim (역방향 조회 영역)

 4.5. /etc/vsftpd/vsftpd.conf

 4.6. banner_file, chroot 을 위한 /ftp 디렉토리

 4.7. nginx.conf 

설정 파일들은 직접 만들어 보세요!

 

 

728x90