7.17. RHEL 시스템 역할을 사용하여 firewalld 구성
RHEL 시스템 역할은 Ansible 자동화 유틸리티의 콘텐츠 집합입니다. 이 콘텐츠는 Ansible 자동화 유틸리티와 함께 여러 시스템을 한 번에 원격으로 관리할 수 있는 일관된 구성 인터페이스를 제공합니다.
rhel-system-roles
패키지에는 rhel-system-roles.firewall
RHEL 시스템 역할이 포함되어 있습니다. 이 역할은 firewalld
서비스의 자동 구성을 위해 도입되었습니다.
방화벽
RHEL 시스템 역할을 사용하면 다양한 firewalld
매개변수를 구성할 수 있습니다. 예를 들면 다음과 같습니다.
- 영역
- 패킷을 허용해야 하는 서비스
- 포트에 대한 트래픽 액세스 권한 부여, 거부 또는 삭제
- 영역의 포트 또는 포트 범위 전달
하나 이상의 시스템에 방화벽 매개 변수를 자동화된 방식으로 적용하려면 Ansible 플레이북의 방화벽
변수를 사용합니다. 플레이북은 텍스트 기반 YAML 형식으로 작성된 하나 이상의 플레이 목록으로, 다음과 같습니다.
--- - name: Enable web services in default zone hosts: managed-node-01.example.com tasks: - name: Enable http and https ansible.builtin.include_role: name: rhel-system-roles.firewall vars: firewall: - service: - http - https state: enabled
제어 노드에서 방화벽
RHEL 시스템 역할을 실행하면 firewalld
매개변수를 관리 노드에 즉시 적용하고 재부팅 시 매개변수를 유지합니다.
7.17.1. 방화벽
RHEL 시스템 역할을 사용하여 firewalld
설정 재설정
시간이 지남에 따라 방화벽 구성을 업데이트하면 의도하지 않은 보안 위험이 발생할 수 있습니다. 방화벽
RHEL 시스템 역할을 사용하면 firewalld
설정을 자동으로 기본 상태로 재설정할 수 있습니다. 이렇게 하면 의도하지 않거나 안전하지 않은 방화벽 규칙을 효율적으로 제거하고 관리를 단순화할 수 있습니다.
사전 요구 사항
- 제어 노드와 관리형 노드가 준비되어 있습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml
)을 생성합니다.--- - name: Reset firewalld example hosts: managed-node-01.example.com tasks: - name: Reset firewalld ansible.builtin.include_role: name: rhel-system-roles.firewall vars: firewall: - previous: replaced
예제 플레이북에 지정된 설정은 다음과 같습니다.
이전: 교체
기존 사용자 정의 설정을 모두 제거하고
firewalld
설정을 기본값으로 재설정합니다.이전:replaced
매개변수를 다른 설정과 결합하면firewall
역할은 새 설정을 적용하기 전에 기존 설정을 모두 제거합니다.플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.firewall/README.md
파일을 참조하십시오.
플레이북 구문을 확인합니다.
$ ansible-playbook --syntax-check ~/playbook.yml
이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
플레이북을 실행합니다.
$ ansible-playbook ~/playbook.yml
검증
제어 노드에서 이 명령을 실행하여 관리 노드의 모든 방화벽 구성이 기본값으로 재설정되었는지 원격으로 확인합니다.
# ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-all-zones'
추가 리소스
-
/usr/share/ansible/roles/rhel-system-roles.firewall/README.md
파일 -
/usr/share/doc/rhel-system-roles/firewall/
디렉터리
7.17.2. 방화벽
RHEL 시스템 역할을 사용하여 하나의 로컬 포트에서 다른 로컬 포트로 firewalld
에서 들어오는 트래픽 전달
방화벽
RHEL 시스템 역할을 사용하여 하나의 로컬 포트에서 다른 로컬 포트로 들어오는 트래픽 전달을 원격으로 구성할 수 있습니다.
예를 들어 여러 서비스가 동일한 시스템에 공존하고 동일한 기본 포트가 필요한 환경이 있는 경우 포트 충돌이 발생할 수 있습니다. 이러한 충돌로 인해 서비스가 중단되고 다운타임이 발생할 수 있습니다. 방화벽
RHEL 시스템 역할을 사용하면 트래픽을 대체 포트로 효율적으로 전달하여 구성을 수정하지 않고도 서비스를 동시에 실행할 수 있습니다.
사전 요구 사항
- 제어 노드와 관리형 노드가 준비되어 있습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml
)을 생성합니다.--- - name: Configure firewalld hosts: managed-node-01.example.com tasks: - name: Forward incoming traffic on port 8080 to 443 ansible.builtin.include_role: name: rhel-system-roles.firewall vars: firewall: - forward_port: 8080/tcp;443; state: enabled runtime: true permanent: true
예제 플레이북에 지정된 설정은 다음과 같습니다.
forward_port: 8080/tcp;443
- TCP 프로토콜을 사용하여 로컬 포트 8080으로 들어오는 트래픽은 포트 443으로 전달됩니다.
runtime: true
런타임 구성에서 변경 사항을 활성화합니다. 기본값은
true
로 설정됩니다.플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.firewall/README.md
파일을 참조하십시오.
플레이북 구문을 확인합니다.
$ ansible-playbook --syntax-check ~/playbook.yml
이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
플레이북을 실행합니다.
$ ansible-playbook ~/playbook.yml
검증
제어 노드에서 다음 명령을 실행하여 관리 노드에서 forwarded-ports를 원격으로 확인합니다.
# ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-forward-ports' managed-node-01.example.com | CHANGED | rc=0 >> port=8080:proto=tcp:toport=443:toaddr=
추가 리소스
-
/usr/share/ansible/roles/rhel-system-roles.firewall/README.md
파일 -
/usr/share/doc/rhel-system-roles/firewall/
디렉터리
7.17.3. 방화벽
RHEL 시스템 역할을 사용하여 firewalld
DMZ 영역 구성
시스템 관리자는 방화벽
RHEL 시스템 역할을 사용하여 enp1s0 인터페이스에서 dmz
영역을 구성하여 HTTPS
트래픽을 영역에 허용할 수 있습니다. 이렇게 하면 외부 사용자가 웹 서버에 액세스할 수 있습니다.
사전 요구 사항
- 제어 노드와 관리형 노드가 준비되어 있습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml
)을 생성합니다.--- - name: Configure firewalld hosts: managed-node-01.example.com tasks: - name: Creating a DMZ with access to HTTPS port and masquerading for hosts in DMZ ansible.builtin.include_role: name: rhel-system-roles.firewall vars: firewall: - zone: dmz interface: enp1s0 service: https state: enabled runtime: true permanent: true
플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.firewall/README.md
파일을 참조하십시오.플레이북 구문을 확인합니다.
$ ansible-playbook --syntax-check ~/playbook.yml
이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
플레이북을 실행합니다.
$ ansible-playbook ~/playbook.yml
검증
제어 노드에서 다음 명령을 실행하여 관리 노드의
dmz
영역에 대한 정보를 원격으로 확인합니다.# ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --zone=dmz --list-all' managed-node-01.example.com | CHANGED | rc=0 >> dmz (active) target: default icmp-block-inversion: no interfaces: enp1s0 sources: services: https ssh ports: protocols: forward: no masquerade: no forward-ports: source-ports: icmp-blocks:
추가 리소스
-
/usr/share/ansible/roles/rhel-system-roles.firewall/README.md
파일 -
/usr/share/doc/rhel-system-roles/firewall/
디렉터리