ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Ansible: DHCP, VSFTPD, Nginx, DNS Infra 자동화
    공부합시다!/Ansible 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
Designed by Tistory.