21.5. firewalld 사용 및 구성 (2024)

방화벽 은 시스템을 외부로부터 원하지 않는 트래픽으로부터 보호하는 방법입니다. 사용자가 방화벽 규칙 집합을 정의하여 호스트 시스템에서 들어오는 네트워크 트래픽을 제어할 수 있습니다. 이러한 규칙은 들어오는 트래픽을 정렬하고 차단하거나 을 통해 허용하는 데 사용됩니다.

firewalld 는 D-Bus 인터페이스와 함께 동적 사용자 지정 호스트 기반 방화벽을 제공하는 방화벽 서비스 데몬입니다. 동적이기 때문에 규칙이 변경될 때마다 방화벽 데몬을 다시 시작할 필요 없이 규칙을 생성, 변경 및 삭제할 수 있습니다.

firewalld 는 트래픽 관리를 간소화하는 영역과 서비스의 개념을 사용합니다. 영역은 사전 정의된 규칙 세트입니다. 네트워크 인터페이스 및 소스를 영역에 할당할 수 있습니다. 허용되는 트래픽은 컴퓨터가 연결된 네트워크에 따라 달라지며 이 네트워크가 할당된 보안 수준입니다. 방화벽 서비스는 특정 서비스에 대해 들어오는 트래픽을 허용하기 위해 필요한 모든 설정을 포괄하고 영역 내에서 적용되는 사전 정의된 규칙입니다.

서비스는 네트워크 통신에 하나 이상의 포트 또는 주소를 사용합니다. 방화벽은 포트를 기반으로 통신을 필터링합니다. 서비스에 대한 네트워크 트래픽을 허용하려면 포트를 열어야 합니다. firewalld 는 명시적으로 open으로 설정되지 않은 포트의 모든 트래픽을 차단합니다. trusted와 같은 일부 영역에서 기본적으로 모든 트래픽을 허용합니다.

nftables 백엔드가 있는 firewalld--direct 옵션을 사용하여 사용자 지정 nftables 규칙을 firewalld 에 전달하는 것을 지원하지 않습니다.

21.5.1. firewalld시작하기

다음은 서비스 및 영역과 같은 firewalld 기능과 firewalld systemd 서비스를 관리하는 방법을 소개합니다.

21.5.1.1. firewalld, nftables 또는 iptables를 사용하는 경우

다음은 다음 유틸리티 중 하나를 사용해야 하는 시나리오에 대한 간략한 개요입니다.

  • firewalld: 간단한 방화벽 활용 사례에 firewalld 유틸리티를 사용합니다. 유틸리티는 사용하기 쉽고 이러한 시나리오의 일반적인 사용 사례를 다룹니다.
  • nftables: nftables 유틸리티를 사용하여 전체 네트워크에 대해 과 같이 복잡하고 성능이 중요한 방화벽을 설정합니다.
  • iptables: Red Hat Enterprise Linux의 iptables 유틸리티는 기존 백엔드 대신 nf_tables 커널 API 를 사용합니다. nf_tables API는 iptables 명령을 사용하는 스크립트가 Red Hat Enterprise Linux에서 계속 작동하도록 이전 버전과의 호환성을 제공합니다. 새 방화벽 스크립트의 경우 Red Hat은 nftables 를 사용하는 것이 좋습니다.

중요

다른 방화벽 서비스가 서로 영향을 주지 않도록 하려면 RHEL 호스트에서 해당 서비스 중 하나만 실행하고 다른 서비스를 비활성화합니다.

21.5.1.2. 영역

firewalld 는 사용자가 해당 네트워크 내의 인터페이스와 트래픽에 배치하기로 결정한 신뢰 수준에 따라 네트워크를 다른 영역으로 분리하는 데 사용할 수 있습니다. 연결은 하나의 영역에만 포함될 수 있지만 영역은 많은 네트워크 연결에 사용할 수 있습니다.

NetworkManager 는 인터페이스 영역의 firewalld 에 알립니다. 다음을 사용하여 인터페이스에 영역을 할당할 수 있습니다.

  • NetworkManager
  • firewall-config 도구
  • firewall-cmd 명령줄 툴
  • RHEL 웹 콘솔

후자의 세 개는 적절한 NetworkManager 구성 파일만 편집할 수 있습니다. 웹 콘솔, firewall-cmd 또는 firewall-config 를 사용하여 인터페이스 영역을 변경하면 요청이 NetworkManager 로 전달되며 ECDHEfirewalld 에서 처리되지 않습니다.

사전 정의된 영역은 /usr/lib/firewalld/zones/ 디렉터리에 저장되며 사용 가능한 모든 네트워크 인터페이스에 즉시 적용할 수 있습니다. 이러한 파일은 수정된 후에만 /etc/firewalld/zones/ 디렉토리에 복사됩니다. 사전 정의된 영역의 기본 설정은 다음과 같습니다.

블록
들어오는 네트워크 연결은 IPv4 및 IPv6-adm-prohibited에 대한 icmp-host-prohibited 메시지와 함께 거부됩니다. 시스템 내에서 시작된 네트워크 연결만 가능합니다.
dmz
내부 네트워크에 대한 제한된 액세스 권한으로 공개적으로 액세스할 수 있는 비유형 영역에 있는 컴퓨터. 선택한 연결만 허용됩니다.
drop
들어오는 네트워크 패킷은 알림 없이 삭제됩니다. 나가는 네트워크 연결만 가능합니다.
external
특히 라우터의 경우 마스커레이딩이 활성화된 외부 네트워크에서 사용합니다. 네트워크의 다른 컴퓨터는 컴퓨터가 손상되지 않도록 신뢰하지 않습니다. 선택한 연결만 허용됩니다.
주로 네트워크의 다른 컴퓨터를 신뢰하는 가정에서 사용할 수 있습니다. 선택한 연결만 허용됩니다.
internal
네트워크의 다른 컴퓨터를 대부분 신뢰하는 경우 내부 네트워크에서 사용할 수 있습니다. 선택한 연결만 허용됩니다.
public
네트워크의 다른 컴퓨터를 신뢰하지 않는 공공 부문의 경우. 선택한 연결만 허용됩니다.
신뢰할 수 있는
모든 네트워크 연결이 허용됩니다.
작업
네트워크의 다른 컴퓨터를 대부분 신뢰하는 직장에서 사용할 수 있습니다. 선택한 연결만 허용됩니다.

이러한 영역 중 하나는 기본 영역으로 설정됩니다. NetworkManager 에 인터페이스 연결이 추가되면 기본 영역에 할당됩니다. 설치 시 firewalld 의 기본 영역이 퍼블릭 영역으로 설정됩니다. 기본 영역은 변경할 수 있습니다.

참고

네트워크 영역 이름은 쉽게 설명해야 하며 사용자가 합리적인 결정을 신속하게 내릴 수 있도록 해야 합니다. 보안 문제를 방지하려면 기본 영역 구성을 검토하고 요구 사항 및 위험 평가에 따라 불필요한 서비스를 비활성화합니다.

추가 리소스

  • firewalld.zone(5) 매뉴얼 페이지.

21.5.1.3. 사전 정의된 서비스

서비스는 로컬 포트, 프로토콜, 소스 포트 및 대상의 목록일 뿐만 아니라 서비스가 활성화된 경우 자동으로 로드되는 방화벽 도우미 모듈 목록입니다. 서비스를 사용하면 사용자는 포트 열기, 프로토콜 정의, 패킷 전달 활성화 등의 여러 작업을 한 단계로 수행할 수 있으므로 사용자는 시간을 절약할 수 있습니다.

서비스 구성 옵션 및 일반 파일 정보는 firewalld.service(5) 매뉴얼 페이지에 설명되어 있습니다. 서비스는 다음과 같은 형식으로 이름이 지정된 개별 XML 구성 파일인 service-name.xml 을 통해 지정됩니다. 프로토콜 이름은 firewalld 에서 서비스 또는 애플리케이션 이름보다 우선합니다.

그래픽 firewall-config 도구, firewall-cmd, firewall-offline-cmd 를 사용하여 서비스를 추가 및 제거할 수 있습니다.

또는 /etc/firewalld/services/ 디렉터리에서 XML 파일을 편집할 수 있습니다. 사용자가 서비스를 추가하거나 변경하지 않으면 해당 XML 파일이 /etc/firewalld/services/ 에 없습니다. /usr/lib/firewalld/services/ 디렉토리에 있는 파일은 서비스를 추가하거나 변경하려면 템플릿으로 사용할 수 있습니다.

추가 리소스

  • firewalld.service(5) 매뉴얼 페이지

21.5.1.4. firewalld 시작

절차

  1. firewalld 를 시작하려면 root 로 다음 명령을 입력합니다.

    # systemctl unmask firewalld# systemctl start firewalld
  2. 시스템을 시작할 때 firewalld 가 자동으로 시작되도록 하려면 root 로 다음 명령을 입력합니다.

    # systemctl enable firewalld

21.5.1.5. firewalld 중지

절차

  1. firewalld 를 중지하려면 root 로 다음 명령을 입력합니다.

    # systemctl stop firewalld
  2. 시스템을 시작할 때 firewalld 가 자동으로 시작되지 않도록 하려면 다음을 수행합니다.

    # systemctl disable firewalld
  3. firewalld D-Bus 인터페이스에 액세스하고 다른 서비스에 firewalld 가 필요한 경우에도 firewalld 를 시작하지 않도록하려면 다음을 수행하십시오.

    # systemctl mask firewalld

21.5.1.6. 영구 firewalld 구성 확인

예를 들어, firewalld 구성 파일을 수동으로 편집한 후 관리자는 특정 상황에서 변경 사항이 올바른지 확인하려고 합니다. firewall-cmd 유틸리티를 사용하여 구성을 확인할 수 있습니다.

사전 요구 사항

  • firewalld 서비스가 실행 중입니다.

절차

  1. firewalld 서비스의 영구 구성을 확인합니다.

    # firewall-cmd --check-configsuccess

    영구 구성이 유효한 경우 명령에서 성공을 반환합니다. 그렇지 않으면 명령에서 다음과 같은 추가 세부 정보가 있는 오류를 반환합니다.

    # firewall-cmd --check-configError: INVALID_PROTOCOL: 'public.xml': 'tcpx' not from {'tcp'|'udp'|'sctp'|'dccp'}

21.5.2. firewalld의 현재 상태 및 설정 보기

firewalld 서비스를 모니터링하려면 상태, 허용된 서비스 및 설정을 표시할 수 있습니다.

21.5.2.1. firewalld의 현재 상태 보기

방화벽 서비스 firewalld 는 기본적으로 시스템에 설치됩니다. firewalld CLI 인터페이스를 사용하여 서비스가 실행 중인지 확인합니다.

절차

  1. 서비스 상태를 보려면 다음을 수행합니다.

    # firewall-cmd --state
  2. 서비스 상태에 대한 자세한 내용은 systemctl status 하위 명령을 사용합니다.

    # systemctl status firewalldfirewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor pr Active: active (running) since Mon 2017-12-18 16:05:15 CET; 50min ago Docs: man:firewalld(1) Main PID: 705 (firewalld) Tasks: 2 (limit: 4915) CGroup: /system.slice/firewalld.service └─705 /usr/bin/python3 -Es /usr/sbin/firewalld --nofork --nopid

21.5.2.2. GUI를 사용하여 허용된 서비스 보기

그래픽 firewall-config 도구를 사용하여 서비스 목록을 보려면 Super 키를 눌러 activities Overview를 입력하고 firewall 을 입력하고 Enter 를 누릅니다. firewall-config 툴이 나타납니다. 이제 서비스 탭에서 서비스 목록을 볼 수 있습니다.

명령줄을 사용하여 그래픽 방화벽 구성 도구를 시작할 수 있습니다.

사전 요구 사항

  • firewall-config 패키지가 설치되어 있어야 합니다.

절차

  • 명령줄을 사용하여 그래픽 방화벽 구성 도구를 시작하려면 다음을 수행합니다.

    $ firewall-config

방화벽 구성 창이 열립니다. 이 명령은 일반 사용자로 실행할 수 있지만, 관리자 암호를 묻는 메시지가 표시되는 경우가 있습니다.

21.5.2.3. CLI를 사용하여 firewalld 설정 보기

CLI 클라이언트를 사용하면 현재 방화벽 설정을 다양한 볼 수 있습니다. --list-all 옵션은 firewalld 설정에 대한 전체 개요를 표시합니다.

firewalld 는 영역을 사용하여 트래픽을 관리합니다. zone 옵션으로 영역을 지정하지 않으면 활성 네트워크 인터페이스와 연결에 할당된 기본 영역에서 명령이 유효합니다.

절차

  • 기본 영역에 대한 모든 관련 정보를 나열하려면 다음을 수행합니다.

    # firewall-cmd --list-allpublic target: default icmp-block-inversion: no interfaces: sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
  • 설정을 표시할 영역을 지정하려면 --zone=zone-name 인수를 firewall-cmd --list-all 명령에 추가합니다.

    # firewall-cmd --list-all --zone=homehome target: default icmp-block-inversion: no interfaces: sources: services: ssh mdns samba-client dhcpv6-client ...
  • 서비스 또는 포트와 같은 특정 정보에 대한 설정을 보려면 특정 옵션을 사용합니다. 명령 도움말 페이지를 사용하여 firewalld 도움말 페이지를 참조하거나 옵션 목록을 가져옵니다.

    # firewall-cmd --help
  • 현재 영역에서 허용되는 서비스를 보려면 다음을 수행합니다.

    # firewall-cmd --list-servicesssh dhcpv6-client

참고

CLI 도구를 사용하여 특정 하위 파트의 설정을 나열하는 경우 해석하기 어려울 수 있습니다. 예를 들어 SSH 서비스와 firewalld 가 서비스에 필요한 포트(22)를 열 수 있도록 허용합니다. 나중에 허용되는 서비스를 나열하면 목록에 SSH 서비스가 표시되지만 열려있는 포트를 나열하는 경우 아무 것도 표시되지 않습니다. 따라서 전체 정보가 수신되는지 확인하려면 --list-all 옵션을 사용하는 것이 좋습니다.

21.5.3. firewalld를 사용하여 네트워크 트래픽 제어

firewalld 패키지는 사전 정의된 많은 서비스 파일을 설치하고 더 많은 서비스를 추가하거나 사용자 지정할 수 있습니다. 그런 다음 이러한 서비스 정의를 사용하여 사용하는 프로토콜과 포트 번호를 인식하지 않고도 서비스의 포트를 열거나 닫을 수 있습니다.

21.5.3.1. CLI를 사용하여 긴급한 경우 모든 트래픽 비활성화

시스템 공격과 같은 긴급 상황에서는 모든 네트워크 트래픽을 비활성화하고 공격자를 차단할 수 있습니다.

절차

  1. 네트워킹 트래픽을 즉시 비활성화하려면 에서 패닉 모드를 전환합니다.

    # firewall-cmd --panic-on

    중요

    패닉 모드를 활성화하면 모든 네트워킹 트래픽이 중지됩니다. 따라서 시스템에 대한 물리적 액세스 권한이 있거나 직렬 콘솔을 사용하여 로그인하는 경우에만 사용해야 합니다.

  2. 패닉 모드를 끄면 방화벽을 영구 설정으로 되돌립니다. 패닉 모드를 끄려면 다음을 입력합니다.

    # firewall-cmd --panic-off

검증

  • 패닉 모드가 켜져 있는지 또는 꺼져 있는지 여부를 확인하려면 다음을 사용합니다.

    # firewall-cmd --query-panic

21.5.3.2. CLI를 사용하여 사전 정의된 서비스로 트래픽 제어

트래픽을 제어하는 가장 간단한 방법은 사전 정의된 서비스를 firewalld 에 추가하는 것입니다. 그러면 필요한 모든 포트가 열리고 서비스 정의 파일에 따라 다른 설정을 수정합니다.

절차

  1. 서비스가 아직 허용되지 않은지 확인합니다.

    # firewall-cmd --list-servicesssh dhcpv6-client
  2. 사전 정의된 모든 서비스를 나열합니다.

    # firewall-cmd --get-servicesRH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry ...
  3. 허용된 서비스에 서비스를 추가합니다.

    # firewall-cmd --add-service=<service_name>
  4. 새 설정을 영구적으로 설정합니다.

    # firewall-cmd --runtime-to-permanent

21.5.3.3. GUI를 사용하여 사전 정의된 서비스로 트래픽 제어

그래픽 사용자 인터페이스를 사용하여 사전 정의된 서비스로 네트워크 트래픽을 제어할 수 있습니다.

사전 요구 사항

  • firewall-config 패키지가 설치되어 있어야 합니다.

절차

  1. 사전 정의된 또는 사용자 지정 서비스를 활성화하거나 비활성화하려면 다음을 수행합니다.

    1. firewall-config 도구를 시작하고 서비스를 구성할 네트워크 영역을 선택합니다.
    2. Zones 탭을 선택한 다음 아래의 서비스 탭을 선택합니다.
    3. 신뢰할 수 있는 서비스 유형마다 확인란을 선택하거나 선택한 영역에서 서비스를 차단하는 확인란을 선택합니다.
  2. 서비스를 편집하려면 다음을 수행합니다.

    1. firewall-config 도구를 시작합니다.
    2. Configuration (구성)이라는 메뉴에서 Permanent 를 선택합니다. Services (서비스) 창의 아래쪽에 추가 아이콘 및 메뉴 버튼이 표시됩니다.
    3. 구성할 서비스를 선택합니다.

Ports,Protocols, Source Port 탭을 사용하면 선택한 서비스의 포트, 프로토콜, 소스 포트를 추가, 변경, 제거할 수 있습니다. 모듈 탭은ECDHE 도우미 모듈을 구성하는 데 사용됩니다. 대상 탭에서는 특정 대상 주소 및 인터넷 프로토콜(IPv4 또는 IPv6)으로의 트래픽을 제한할 수 있습니다.

참고

런타임 모드에서는 서비스 설정을 변경할 수 없습니다.

21.5.3.4. 새 서비스 추가

그래픽 firewall-config 도구, firewall-cmd, firewall-offline-cmd 를 사용하여 서비스를 추가 및 제거할 수 있습니다. 또는 /etc/firewalld/services/ 에서 XML 파일을 편집할 수 있습니다. 사용자가 서비스를 추가하거나 변경하지 않으면 해당 XML 파일이 /etc/firewalld/services/ 에 없습니다. /usr/lib/firewalld/services/ 파일은 서비스를 추가하거나 변경하려면 템플릿으로 사용할 수 있습니다.

참고

서비스 이름은 영숫자여야 하며 또한 _ (underscore) 및 (대시) 문자를 포함할 수 있습니다.

절차

터미널에 새 서비스를 추가하려면 firewall-cmd 또는 firewall-offline-cmd사용하십시오.

  1. 다음 명령을 입력하여 새롭고 빈 서비스를 추가합니다.

    $ firewall-cmd --new-service=<service_name> --permanent
  2. 로컬 파일을 사용하여 새 서비스를 추가하려면 다음 명령을 사용합니다.

    $ firewall-cmd --new-service-from-file=<service_xml_file> --permanent

    추가 --name= <service_name> 옵션을 사용하여 서비스 이름을 변경할 수 있습니다.

  3. 서비스 설정이 변경되는 즉시 서비스의 업데이트된 사본이 /etc/firewalld/services/ 에 배치됩니다.

    root 로 다음 명령을 입력하여 서비스를 수동으로 복사할 수 있습니다.

    # cp /usr/lib/firewalld/services/service-name.xml /etc/firewalld/services/service-name.xml

firewalld 는 첫 번째 위치에 있는 /usr/lib/firewalld/services 에서 파일을 로드합니다. 파일이 /etc/firewalld/services 에 배치되고 유효한 경우 파일이 /usr/lib/firewalld/services 에서 일치하는 파일을 재정의합니다. /usr/lib/firewalld/services 의 재정의된 파일은 /etc/firewalld/services 에서 일치하는 파일을 제거하거나 firewalld 가 서비스의 기본값을 로드하라는 요청을 받은 즉시 사용됩니다. 이는 영구 환경에만 적용됩니다. 런타임 환경에서도 이러한 폴백을 가져오려면 다시 로드해야 합니다.

21.5.3.5. GUI를 사용하여 포트 열기

방화벽을 통한 트래픽을 특정 포트에 대한 트래픽을 허용하려면 GUI에서 포트를 열 수 있습니다.

사전 요구 사항

  • firewall-config 패키지가 설치되어 있어야 합니다.

절차

  1. firewall-config 도구를 시작하고 설정을 변경할 네트워크 영역을 선택합니다.
  2. Ports(포트 ) 탭을 선택하고 오른쪽에 있는 Add(추가 ) 버튼을 클릭합니다. Port and Protocol(포트 및 프로토콜 ) 창이 열립니다.
  3. 허용할 포트의 포트 번호 또는 범위를 입력합니다.
  4. 목록에서 tcp 또는 udp 를 선택합니다.

21.5.3.6. GUI를 사용하여 프로토콜로 트래픽 제어

특정 프로토콜을 사용하여 방화벽을 통한 트래픽을 허용하려면 GUI를 사용할 수 있습니다.

사전 요구 사항

  • firewall-config 패키지가 설치되어 있어야 합니다.

절차

  1. firewall-config 도구를 시작하고 설정을 변경할 네트워크 영역을 선택합니다.
  2. Protocols(프로토콜 ) 탭을 선택하고 오른쪽에 있는 Add(추가 ) 버튼을 클릭합니다. Protocol(프로토콜 ) 창이 열립니다.
  3. 목록에서 프로토콜을 선택하거나 Other Protocol(기타 프로토콜) 확인란을 선택하고 필드에 프로토콜을 입력합니다.

21.5.3.7. GUI를 사용하여 소스 포트 열기

특정 포트에서 방화벽을 통한 트래픽을 허용하려면 GUI를 사용할 수 있습니다.

절차

  1. firewall-config 도구를 시작하고 변경할 설정의 네트워크 영역을 선택합니다.
  2. Source Port(소스 포트 ) 탭을 선택하고 오른쪽에 있는 Add (추가) 단추를 클릭합니다. Source Port(소스 포트 ) 창이 열립니다.
  3. 허용할 포트의 포트 번호 또는 범위를 입력합니다. 목록에서 tcp 또는 udp 를 선택합니다.

21.5.4. CLI를 사용하여 포트 제어

포트는 운영 체제에서 네트워크 트래픽을 수신 및 구분하고 이에 따라 시스템 서비스로 전달할 수 있는 논리적 장치입니다. 일반적으로 포트에서 수신 대기하는 데몬으로 표시됩니다. 즉, 이 포트로 들어오는 모든 트래픽을 기다립니다.

일반적으로 시스템 서비스는 예약된 표준 포트에서 수신 대기합니다. 예를 들어 httpd 데몬은 포트 80에서 수신 대기합니다. 그러나 기본적으로 시스템 관리자는 보안 또는 기타 이유로 다른 포트에서 수신 대기하도록 데몬을 구성합니다.

21.5.4.1. 포트 열기

열려 있는 포트를 통해 시스템은 보안 위험을 나타내는 외부에서 액세스할 수 있습니다. 일반적으로 포트를 닫고 특정 서비스에 필요한 경우에만 포트를 엽니다.

절차

현재 영역에서 열려 있는 포트 목록을 가져오려면 다음을 수행합니다.

  1. 허용되는 모든 포트를 나열합니다.

    # firewall-cmd --list-ports
  2. 포트를 허용된 포트에 추가하여 들어오는 트래픽에 대해 엽니다.

    # firewall-cmd --add-port=port-number/port-type

    포트 유형은 tcp,udp,sctp 또는 dccp 입니다. 유형은 네트워크 통신 유형과 일치해야 합니다.

  3. 새 설정을 영구적으로 설정합니다.

    # firewall-cmd --runtime-to-permanent

    포트 유형은 tcp,udp,sctp 또는 dccp 입니다. 유형은 네트워크 통신 유형과 일치해야 합니다.

21.5.4.2. 포트 닫기

열려 있는 포트가 더 이상 필요하지 않은 경우 firewalld 에서 해당 포트를 닫습니다. 포트를 열린 상태로 유지하면 보안 위험이 있으므로 사용하지 않는 즉시 모든 불필요한 포트를 종료하는 것이 좋습니다.

절차

포트를 종료하려면 허용된 포트 목록에서 제거합니다.

  1. 허용되는 모든 포트를 나열합니다.

    # firewall-cmd --list-ports

    주의

    이 명령은 포트로 열린 포트 목록만 제공합니다. 서비스로 열린 열려 있는 포트는 볼 수 없습니다. 따라서 --list-ports 대신 --list-all 옵션을 사용해야 합니다.

  2. 포트를 허용된 포트에서 제거하여 들어오는 트래픽에 대해 종료합니다.

    # firewall-cmd --remove-port=port-number/port-type
  3. 새 설정을 영구적으로 설정합니다.

    # firewall-cmd --runtime-to-permanent

21.5.5. firewalld 영역 작업

영역은 들어오는 트래픽을 보다 투명하게 관리하는 개념을 나타냅니다. 영역은 네트워킹 인터페이스에 연결되거나 다양한 소스 주소가 할당됩니다. 각 영역에 대해 개별적으로 방화벽 규칙을 관리하므로 복잡한 방화벽 설정을 정의하고 트래픽에 적용할 수 있습니다.

21.5.5.1. 영역 나열

명령줄을 사용하여 영역을 나열할 수 있습니다.

절차

  1. 시스템에서 사용할 수 있는 영역을 보려면 다음을 수행합니다.

    # firewall-cmd --get-zones

    firewall-cmd --get-zones 명령은 시스템에서 사용할 수 있는 모든 영역을 표시하지만 특정 영역에 대한 세부 정보는 표시하지 않습니다.

  2. 모든 영역에 대한 자세한 정보를 보려면 다음을 수행합니다.

    # firewall-cmd --list-all-zones
  3. 특정 영역에 대한 자세한 정보를 보려면 다음을 수행합니다.

    # firewall-cmd --zone=zone-name --list-all

21.5.5.2. 특정 영역에 대한 firewalld 설정 수정

cli를 사용하여 사전 정의된 서비스로 트래픽 제어 및 cli를 사용하여 포트 제어 는 현재 작업 영역의 범위에서 서비스를 추가하거나 포트를 수정하는 방법을 설명합니다. 때로는 다른 영역에 규칙을 설정해야 합니다.

절차

  • 다른 영역에서 작업하려면 --zone= <zone_name> 옵션을 사용합니다. 예를 들어 public 영역에서 SSH 서비스를 허용하려면 다음을 수행합니다.

    # firewall-cmd --add-service=ssh --zone=public

21.5.5.3. 기본 영역 변경

시스템 관리자는 구성 파일의 네트워킹 인터페이스에 영역을 할당합니다. 인터페이스가 특정 영역에 할당되지 않은 경우 기본 영역에 할당됩니다. firewalld 서비스를 다시 시작한 후 firewalld 는 기본 영역에 대한 설정을 로드하여 활성화합니다.

절차

기본 영역을 설정하려면 다음을 수행합니다.

  1. 현재 기본 영역을 표시합니다.

    # firewall-cmd --get-default-zone
  2. 새 기본 영역을 설정합니다.

    # firewall-cmd --set-default-zone <zone_name>

    참고

    이 절차에 따라 설정은 --permanent 옵션 없이 영구적인 설정입니다.

21.5.5.4. 영역에 네트워크 인터페이스 할당

사용 중인 인터페이스의 영역을 변경하여 다양한 영역에 대해 다양한 규칙 집합을 정의한 다음 설정을 빠르게 변경할 수 있습니다. 여러 인터페이스를 사용하면 각 인터페이스를 통해 들어오는 트래픽을 구분하도록 특정 영역을 설정할 수 있습니다.

절차

특정 인터페이스에 영역을 할당하려면 다음을 수행합니다.

  1. 활성 영역과 여기에 할당된 인터페이스를 나열합니다.

    # firewall-cmd --get-active-zones
  2. 인터페이스를 다른 영역에 할당합니다.

    # firewall-cmd --zone=zone_name --change-interface=interface_name --permanent

21.5.5.5. nmcli를 사용하여 연결에 영역 할당

nmcli 유틸리티를 사용하여 NetworkManager 연결에 firewalld 영역을 추가할 수 있습니다.

절차

  1. NetworkManager 연결 프로필에 영역을 할당합니다.

    # nmcli connection modify profile connection.zone zone_name
  2. 연결을 활성화합니다.

    # nmcli connection up profile

21.5.5.6. ifcfg 파일에서 네트워크 연결에 수동으로 영역 할당

NetworkManager 에서 연결을 관리하는 경우 사용하는 영역을 알고 있어야 합니다. 모든 네트워크 연결에 대해 이동식 장치가 있는 컴퓨터의 위치에 따라 다양한 방화벽 설정의 유연성을 제공하는 영역을 지정할 수 있습니다. 따라서 회사 또는 홈과 같은 다양한 위치에 대해 영역 및 설정을 지정할 수 있습니다.

절차

  • 연결 영역을 설정하려면 /etc/sysconfig/network-scripts/ifcfg-connection_name 파일을 편집하고 이 연결에 영역을 할당하는 행을 추가합니다.

    ZONE=zone_name

21.5.5.7. 새 영역 생성

사용자 지정 영역을 사용하려면 새 영역을 생성하고 사전 정의된 영역처럼 사용합니다. 새 영역에는 --permanent 옵션이 필요합니다. 그러지 않으면 명령이 작동하지 않습니다.

절차

  1. 새 영역을 생성합니다.

    # firewall-cmd --permanent --new-zone=zone-name
  2. 새 영역이 영구 설정에 추가되었는지 확인합니다.

    # firewall-cmd --get-zones
  3. 새 설정을 영구적으로 설정합니다.

    # firewall-cmd --runtime-to-permanent

21.5.5.8. 영역 구성 파일

영역은 영역 구성 파일을 사용하여 만들 수도 있습니다. 이 방법은 새 영역을 만들어야 할 때 유용할 수 있지만 다른 영역의 설정을 재사용하고 약간만 변경하려고 합니다.

firewalld 영역 구성 파일에는 영역에 대한 정보가 포함되어 있습니다. XML 파일 형식의 영역 설명, 서비스, 포트, 프로토콜, icmp-blocks, masquerade, forward-ports 및 리치 언어 규칙입니다. 파일 이름은 zone-name.xml 이어야 합니다. 여기서 zone-name 의 길이는 현재 17ECDHE로 제한됩니다. 영역 구성 파일은 /usr/lib/firewalld/zones//etc/firewalld/zones/ 디렉터리에 있습니다.

다음 예제에서는 TCPUDP 프로토콜 모두에 대해 하나의 서비스(SSH)와 하나의 포트 범위를 허용하는 구성을 보여줍니다.

<?xml version="1.0" encoding="utf-8"?><zone> <short>My Zone</short> <description>Here you can describe the characteristic features of the zone.</description> <service name="ssh"/> <port protocol="udp" port="1025-65535"/> <port protocol="tcp" port="1025-65535"/></zone>

해당 영역의 설정을 변경하려면 섹션을 추가하거나 제거하여 포트, 서비스 등을 추가합니다.

추가 리소스

  • firewalld.zone 매뉴얼 페이지

21.5.5.9. 영역 대상을 사용하여 들어오는 트래픽에 대한 기본 동작 설정

모든 영역에 대해 추가로 지정되지 않은 들어오는 트래픽을 처리하는 기본 동작을 설정할 수 있습니다. 이러한 동작은 영역의 대상을 설정하여 정의됩니다. 4가지 옵션이 있습니다.

  • ACCEPT: 특정 규칙에서 허용되지 않는 패킷을 제외한 모든 수신 패킷을 수락합니다.
  • REJECT: 특정 규칙으로 허용되는 패킷을 제외한 모든 수신 패킷을 거부합니다. firewalld 가 패킷을 거부하면 소스 시스템에 거부에 대한 정보가 표시됩니다.
  • DROP: 특정 규칙에서 허용하는 패킷을 제외한 모든 수신 패킷을 삭제합니다. firewalld 가 패킷을 삭제하면 소스 시스템에 패킷 삭제에 대한 정보가 표시되지 않습니다.
  • 기본값: REJECT 와 유사한 동작이지만 특정 시나리오에서 특별한 의미가 있습니다. 자세한 내용은 firewall-cmd(1) 도움말 페이지의 Adapt 및 Query Zones 및 Policies 섹션을 참조하십시오.

절차

영역의 대상을 설정하려면 다음을 수행합니다.

  1. 특정 영역에 대한 정보를 나열하여 기본 대상을 확인합니다.

    # firewall-cmd --zone=zone-name --list-all
  2. 영역에 새 대상을 설정합니다.

    # firewall-cmd --permanent --zone=zone-name --set-target=<default|ACCEPT|REJECT|DROP>

추가 리소스

  • firewall-cmd(1) 도움말 페이지

21.5.6. 소스에 따라 영역을 사용하여 들어오는 트래픽 관리

영역을 사용하여 소스에 따라 들어오는 트래픽을 관리할 수 있습니다. 이를 통해 들어오는 트래픽을 정렬하고 다른 영역을 통해 라우팅하여 해당 트래픽으로 연결할 수 있는 서비스를 허용하거나 허용하지 않도록 할 수 있습니다.

소스를 영역에 추가하면 영역이 활성화되고 해당 소스에서 들어오는 트래픽이 이를 통해 전송됩니다. 지정된 소스의 트래픽에 적절하게 적용되는 각 영역에 대해 다른 설정을 지정할 수 있습니다. 하나의 네트워크 인터페이스만 있는 경우에도 더 많은 영역을 사용할 수 있습니다.

21.5.6.1. 소스 추가

들어오는 트래픽을 특정 영역으로 라우팅하려면 소스를 해당 영역에 추가합니다. 소스는 IP 주소이거나 클래스 없는 도메인 간 라우팅(CIDR) 표기법의 IP 마스크일 수 있습니다.

참고

중복되는 네트워크 범위를 사용하여 여러 영역을 추가하는 경우 영역 이름으로 영숫자로 정렬되며 첫 번째 영역만 고려됩니다.

  • 현재 영역에 소스를 설정하려면 다음을 수행합니다.

    # firewall-cmd --add-source=<source>
  • 특정 영역의 소스 IP 주소를 설정하려면 다음을 수행합니다.

    # firewall-cmd --zone=zone-name --add-source=<source>

다음 절차에서는 신뢰할 수 있는 영역의 192.168.2.15 에서 들어오는 모든 트래픽을 허용합니다.

절차

  1. 사용 가능한 모든 영역을 나열합니다.

    # firewall-cmd --get-zones
  2. 영구 모드에서 소스 IP를 신뢰할 수 있는 영역에 추가합니다.

    # firewall-cmd --zone=trusted --add-source=192.168.2.15
  3. 새 설정을 영구적으로 설정합니다.

    # firewall-cmd --runtime-to-permanent

21.5.6.2. 소스 제거

영역에서 소스를 제거하면 소스에서 들어오는 트래픽이 줄어듭니다.

절차

  1. 필수 영역에 허용된 소스를 나열합니다.

    # firewall-cmd --zone=zone-name --list-sources
  2. 영역에서 소스를 영구적으로 제거합니다.

    # firewall-cmd --zone=zone-name --remove-source=<source>
  3. 새 설정을 영구적으로 설정합니다.

    # firewall-cmd --runtime-to-permanent

21.5.6.3. 소스 포트 추가

origin 포트를 기반으로 트래픽을 정렬하려면 --add-source-port 옵션을 사용하여 소스 포트를 지정합니다. 이 값을 --add-source 옵션과 결합하여 트래픽을 특정 IP 주소 또는 IP 범위로 제한할 수도 있습니다.

절차

  • 소스 포트를 추가하려면 다음을 수행합니다.

    # firewall-cmd --zone=zone-name --add-source-port=<port-name>/<tcp|udp|sctp|dccp>

21.5.6.4. 소스 포트 제거

소스 포트를 제거하면 원본 포트에 따라 트래픽 정렬을 비활성화합니다.

절차

  • 소스 포트를 제거하려면 다음을 수행합니다.

    # firewall-cmd --zone=zone-name --remove-source-port=<port-name>/<tcp|udp|sctp|dccp>

21.5.6.5. 특정 도메인에만 서비스를 허용하려면 영역 및 소스를 사용합니다.

특정 네트워크의 트래픽이 시스템에서 서비스를 사용하도록 허용하려면 영역 및 소스를 사용합니다. 다음 절차에서는 다른 모든 트래픽이 차단되는 동안 192.0.2.0/24 네트워크의 HTTP 트래픽만 허용합니다.

주의

이 시나리오를 구성할 때 기본 대상이 있는 영역을 사용합니다. 대상이 ACCEPT 로 설정된 영역을 사용하면 192.0.2.0/24 의 트래픽의 경우 모든 네트워크 연결이 허용되기 때문에 보안 위험이 있습니다.

절차

  1. 사용 가능한 모든 영역을 나열합니다.

    # firewall-cmd --get-zonesblock dmz drop external home internal public trusted work
  2. 내부 영역에 IP 범위를 추가하여 소스에서 영역을 통해 발생하는 트래픽을 라우팅합니다.

    # firewall-cmd --zone=internal --add-source=192.0.2.0/24
  3. http 서비스를 내부 영역에 추가합니다.

    # firewall-cmd --zone=internal --add-service=http
  4. 새 설정을 영구적으로 설정합니다.

    # firewall-cmd --runtime-to-permanent

검증

  • 내부 영역이 활성화되어 있고 서비스가 허용되는지 확인합니다.

    # firewall-cmd --zone=internal --list-allinternal (active) target: default icmp-block-inversion: no interfaces: sources: 192.0.2.0/24 services: co*ckpit dhcpv6-client mdns samba-client ssh http ...

추가 리소스

  • firewalld.zones(5) 도움말 페이지

21.5.7. 영역 간에 전달된 트래픽 필터링

정책 오브젝트를 사용하면 사용자가 정책에 유사한 권한이 필요한 다양한 ID를 그룹화할 수 있습니다. 트래픽 방향에 따라 정책을 적용할 수 있습니다.

정책 오브젝트 기능은 firewalld에서 정방향 및 출력 필터링을 제공합니다. firewalld를 사용하여 로컬에서 호스팅된 VM에 액세스할 수 있도록 다양한 영역 간 트래픽을 필터링할 수 있습니다.

21.5.7.1. 정책 오브젝트와 영역 간의 관계

Policy 개체를 사용하면 서비스, 포트 및 리치 규칙과 같은 firewalld의 기본 규칙을 정책에 연결할 수 있습니다. 상태 저장 및 단방향 방식으로 영역 간에 통과하는 트래픽에 정책 오브젝트를 적용할 수 있습니다.

# firewall-cmd --permanent --new-policy myOutputPolicy# firewall-cmd --permanent --policy myOutputPolicy --add-ingress-zone HOST# firewall-cmd --permanent --policy myOutputPolicy --add-egress-zone ANY

HOSTANY 는 수신 및 송신 영역 목록에 사용되는 심볼릭 영역입니다.

  • HOST 심볼릭 영역을 사용하면 에서 시작되는 트래픽에 대한 정책이 허용되거나 firewalld를 실행하는 호스트의 대상이 있습니다.
  • ANY 심볼릭 영역은 현재 및 향후 모든 영역에 정책을 적용합니다. ANY 심볼릭 영역은 모든 영역의 와일드카드 역할을 합니다.

21.5.7.2. 우선순위를 사용하여 정책 정렬

여러 정책을 동일한 트래픽 집합에 적용할 수 있으므로 적용할 수 있는 정책에 대한 우선 순위 순서를 생성하는 데 우선순위를 사용해야 합니다.

정책을 정렬할 우선 순위를 설정하려면 다음을 수행합니다.

# firewall-cmd --permanent --policy mypolicy --set-priority -500

위의 예에서 -500 은 우선 순위가 낮지만 우선 순위가 높습니다. 따라서 -500은 -100 이전에 실행됩니다. 우선순위가 높은 값은 더 낮은 값보다 우선합니다.

다음 규칙은 정책 우선순위에 적용됩니다.

  • 부정 우선 순위가 있는 정책은 영역의 규칙 앞에 적용됩니다.
  • 긍정적인 우선 순위가 있는 정책은 영역의 규칙 뒤에 적용됩니다.
  • 우선 순위 0은 예약되어 있으므로 사용할 수 없습니다.

21.5.7.3. 정책 오브젝트를 사용하여 로컬 호스트 컨테이너와 호스트에 물리적으로 연결된 네트워크 간의 트래픽 필터링

정책 오브젝트 기능을 사용하면 컨테이너 및 가상 시스템 트래픽을 필터링할 수 있습니다.

절차

  1. 새 정책 만들기.

    # firewall-cmd --permanent --new-policy podmanToHost
  2. 모든 트래픽을 차단합니다.

    # firewall-cmd --permanent --policy podmanToHost --set-target REJECT# firewall-cmd --permanent --policy podmanToHost --add-service dhcp# firewall-cmd --permanent --policy podmanToHost --add-service dns

    참고

    기본적으로 호스트에 대한 모든 트래픽을 차단한 다음 호스트에 필요한 서비스를 선택적으로 여는 것이 좋습니다.

  3. 정책과 함께 사용할 수신 영역을 정의합니다.

    # firewall-cmd --permanent --policy podmanToHost --add-ingress-zone podman
  4. 정책과 함께 사용할 송신 영역을 정의합니다.

    # firewall-cmd --permanent --policy podmanToHost --add-egress-zone ANY

검증

  • 정책에 대한 정보를 확인합니다.

    # firewall-cmd --info-policy podmanToHost

21.5.7.4. 정책 오브젝트의 기본 대상 설정

정책에 --set-target 옵션을 지정할 수 있습니다. 다음 대상을 사용할 수 있습니다.

  • ACCEPT - 패킷을 수락
  • DROP - 원하지 않는 패킷을 삭제합니다.
  • REJECT - ICMP 응답을 사용하여 원하지 않는 패킷을 거부
  • CONTINUE (기본값) - 패킷에는 다음 정책 및 영역의 규칙이 적용됩니다.

    # firewall-cmd --permanent --policy mypolicy --set-target CONTINUE

검증

  • 정책에 대한 정보 확인

    # firewall-cmd --info-policy mypolicy

21.5.8. firewalld를 사용하여 NAT 구성

firewalld 를 사용하면 다음 NAT(네트워크 주소 변환) 유형을 구성할 수 있습니다.

  • 마스커레이딩
  • SNAT(소스 NAT)
  • 대상 NAT(DNAT)
  • 리디렉션

21.5.8.1. NAT 유형

다음은 다양한 NAT(네트워크 주소 변환) 유형입니다.

마스커레이딩 및 소스 NAT (SNAT)

이러한 NAT 유형 중 하나를 사용하여 패킷의 소스 IP 주소를 변경합니다. 예를 들어 인터넷 서비스 공급자는 10.0.0.0/8 과 같은 개인 IP 범위를 라우팅하지 않습니다. 네트워크에서 개인 IP 범위를 사용하며 사용자가 인터넷의 서버에 연결할 수 있어야 하는 경우 해당 범위에서 패킷의 소스 IP 주소를 공용 IP 주소로 매핑합니다.

마스커레이딩과 SNAT는 서로 매우 비슷합니다. 차이점은 다음과 같습니다.

  • 마스커레이딩은 나가는 인터페이스의 IP 주소를 자동으로 사용합니다. 따라서 나가는 인터페이스에서 동적 IP 주소를 사용하는 경우 마스커레이딩을 사용합니다.
  • SNAT는 패킷의 소스 IP 주소를 지정된 IP로 설정하고 나가는 인터페이스의 IP를 동적으로 조회하지 않습니다. 따라서 SNAT는 마스커레이딩보다 빠릅니다. 나가는 인터페이스에서 고정 IP 주소를 사용하는 경우 SNAT를 사용합니다.
대상 NAT(DNAT)
이 NAT 유형을 사용하여 들어오는 패킷의 대상 주소와 포트를 다시 작성합니다. 예를 들어 웹 서버가 개인 IP 범위의 IP 주소를 사용하므로 인터넷에서 직접 액세스할 수 없는 경우 라우터에 DNAT 규칙을 설정하여 들어오는 트래픽을 이 서버로 리디렉션할 수 있습니다.
리디렉션
이 유형은 체인 후크에 따라 패킷을 로컬 시스템으로 리디렉션하는 DNAT의 특별한 사례입니다. 예를 들어 서비스가 표준 포트와 다른 포트에서 실행되는 경우 표준 포트에서 들어오는 트래픽을 이 특정 포트로 리디렉션할 수 있습니다.

21.5.8.2. IP 주소 마스커레이딩 구성

시스템에서 IP 마스커레이딩을 활성화할 수 있습니다. IP 마스커레이딩은 인터넷에 액세스할 때 게이트웨이 뒤의 개별 시스템을 숨깁니다.

절차

  1. IP 마스커레이드가 활성화되어 있는지 확인하려면 (예: 외부 영역의 경우) 다음 명령을 root 로 입력합니다.

    # firewall-cmd --zone=external --query-masquerade

    이 명령은 활성화된 경우 종료 상태 0 으로 yes 를 출력합니다. 그렇지 않으면 종료 상태 1no 를 출력합니다. 영역을 생략하면 기본 영역이 사용됩니다.

  2. IP 마스커레이딩을 사용하려면 root 로 다음 명령을 입력합니다.

    # firewall-cmd --zone=external --add-masquerade
  3. 이 설정을 영구적으로 설정하려면 명령에 --permanent 옵션을 전달합니다.
  4. IP 마스커레이딩을 비활성화하려면 root 로 다음 명령을 입력합니다.

    # firewall-cmd --zone=external --remove-masquerade

    이 설정을 영구적으로 설정하려면 명령에 --permanent 옵션을 전달합니다.

21.5.9. DNAT를 사용하여 HTTPS 트래픽을 다른 호스트로 전달

웹 서버가 개인 IP 주소가 있는 DMZ에서 실행되는 경우 인터넷의 클라이언트가 이 웹 서버에 연결할 수 있도록 대상 네트워크 주소 변환(DNAT)을 구성할 수 있습니다. 이 경우 웹 서버의 호스트 이름이 라우터의 공용 IP 주소로 확인됩니다. 클라이언트에서 라우터의 정의된 포트에 대한 연결을 설정하면 라우터가 패킷을 내부 웹 서버로 전달합니다.

사전 요구 사항

  • DNS 서버는 웹 서버의 호스트 이름을 라우터의 IP 주소로 확인합니다.
  • 다음 설정을 알고 있습니다.

    • 전달할 개인 IP 주소 및 포트 번호입니다.
    • 사용할 IP 프로토콜
    • 패킷을 리디렉션할 웹 서버의 대상 IP 주소 및 포트

절차

  1. 방화벽 정책을 생성합니다.

    # firewall-cmd --permanent --new-policy ExamplePolicy

    영역과 달리 정책은 입력, 출력 및 전달된 트래픽에 대한 패킷 필터링을 허용합니다. 로컬에서 웹 서버, 컨테이너 또는 가상 머신에서 끝점으로 트래픽을 전달하려면 이러한 기능이 필요하므로 중요합니다.

  2. 라우터 자체에서 로컬 IP 주소에 연결하고 이 트래픽을 전달할 수 있도록 수신 및 송신 트래픽에 대한 심볼릭 영역을 구성합니다.

    # firewall-cmd --permanent --policy=ExamplePolicy --add-ingress-zone=HOST# firewall-cmd --permanent --policy=ExamplePolicy --add-egress-zone=ANY

    --add-ingress-zone=HOST 옵션은 로컬로 생성된 패킷을 로컬에서 참조하며, 로컬 호스트에서 전송됩니다. --add-egress-zone=ANY 옵션은 모든 영역으로 예정된 트래픽을 나타냅니다.

  3. 트래픽을 웹 서버로 전달하는 리치 규칙을 추가합니다.

    # firewall-cmd --permanent --policy=ExamplePolicy --add-rich-rule='rule family="ipv4" destination address="192.0.2.1" forward-port port="443" protocol="tcp" to-port="443" to-addr="192.51.100.20"'

    리치 규칙은 라우터의 IP 주소 10.0.0.11의 포트 443에서 웹 서버의 IP 192.51.100.20의 포트 443으로 TCP 트래픽을 전달합니다. 규칙은 ExamplePolicy 를 사용하여 라우터가 로컬 IP 주소에도 연결할 수 있는지 확인합니다.

  4. 방화벽 구성 파일을 다시 로드합니다.

    # firewall-cmd --reloadsuccess
  5. 커널에서 127.0.0.0/8의 라우팅을 활성화합니다.

    # echo "net.ipv4.conf.all.route_localnet=1" > /etc/sysctl.d/90-enable-route-localnet.conf# sysctl -p /etc/sysctl.d/90-enable-route-localnet.conf

검증

  1. 웹 서버로 전달한 라우터의 IP 주소 및 포트에 연결합니다.

    # curl https://192.0.2.1:443
  2. 선택 사항: net.ipv4.conf.all.route_localnet 이 활성화되어 있는지 확인합니다.

    # sysctl net.ipv4.conf.all.route_localnetnet.ipv4.conf.all.route_localnet = 1
  3. ExamplePolicy 가 활성화되어 있고 필요한 설정이 포함되어 있는지 확인합니다. 특히 소스 IP 주소 및 포트, 사용할 프로토콜, 대상 IP 주소와 포트:

    # firewall-cmd --info-policy=ExamplePolicyExamplePolicy (active) priority: -1 target: CONTINUE ingress-zones: HOST egress-zones: ANY services: ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:rule family="ipv4" destination address="192.0.2.1" forward-port port="443" protocol="tcp" to-port="443" to-addr="192.51.100.20"

추가 리소스

  • firewall-cmd(1), firewalld.policies(5), firewalld.rich languages(5), sysctl(8), sysctl.conf(5) 매뉴얼 페이지
  • /etc/sysctl.d/의 설정 파일을 사용하여 커널 매개변수 조정

21.5.10. ICMP 요청 관리

ICMP( Internet Control Message Protocol )는 다양한 네트워크 장치에서 오류 메시지 및 연결 문제를 나타내는 운영 정보를 전송하는 데 사용하는 지원 프로토콜입니다(예: 요청된 서비스를 사용할 수 없음). ICMP 는 시스템 간에 데이터를 교환하는 데 사용되지 않으므로 TCP 및 UDP와 같은 전송 프로토콜과 다릅니다.

안타깝게도 ICMP 메시지, 특히 에코 요청 및 에코 를 사용하여 네트워크에 대한 정보를 공개하고 다양한 유형의 사기 활동에 이러한 정보를 오용할 수 있습니다. 따라서 firewalld 를 사용하면 ICMP 요청을 차단하여 네트워크 정보를 보호할 수 있습니다.

21.5.10.1. ICMP 요청 나열 및 차단

ICMP 요청 나열

ICMP 요청은 /usr/lib/firewalld/icmptypes/ 디렉터리에 있는 개별 XML 파일에 설명되어 있습니다. 이러한 파일을 읽고 요청에 대한 설명을 확인할 수 있습니다. firewall-cmd 명령은 ICMP 요청 조작을 제어합니다.

  • 사용 가능한 모든 ICMP 유형을 나열하려면 다음을 수행합니다.

    # firewall-cmd --get-icmptypes
  • ICMP 요청은 IPv4, IPv6 또는 두 프로토콜 모두에서 사용할 수 있습니다. ICMP 요청이 사용된 프로토콜을 보려면 다음을 수행합니다.

    # firewall-cmd --info-icmptype=<icmptype>
  • ICMP 요청의 상태는 요청이 현재 차단되어 있거나 그렇지 않은 경우 yes 가 표시됩니다. ICMP 요청이 현재 차단되어 있는지 확인하려면 다음을 수행하십시오.

    # firewall-cmd --query-icmp-block=<icmptype>

ICMP 요청 차단 또는 차단 해제

서버에서 ICMP 요청을 차단하면 정상적으로 수행하는 정보를 제공하지 않습니다. 그러나 이는 정보가 전혀 제공되지 않음을 의미하지는 않습니다. 클라이언트는 특정 ICMP 요청이 차단되고 있는 정보를 수신합니다(거부). 특히 IPv6 트래픽에서 통신 문제가 발생할 수 있으므로 ICMP 요청 차단은 신중하게 고려해야 합니다.

  • ICMP 요청이 현재 차단되어 있는지 확인하려면 다음을 수행하십시오.

    # firewall-cmd --query-icmp-block=<icmptype>
  • ICMP 요청을 차단하려면 다음을 수행합니다.

    # firewall-cmd --add-icmp-block=<icmptype>
  • ICMP 요청의 블록을 제거하려면 다음을 수행합니다.

    # firewall-cmd --remove-icmp-block=<icmptype>

정보를 제공하지 않고 ICMP 요청을 차단

일반적으로 ICMP 요청을 차단하면 클라이언트가 해당 요청을 차단하고 있음을 알고 있습니다. 따라서 실시간 IP 주소를 스니핑하는 잠재적인 공격자는 IP 주소가 온라인 상태임을 계속 확인할 수 있습니다. 이 정보를 완전히 숨기려면 ICMP 요청을 모두 삭제해야 합니다.

  • 모든 ICMP 요청을 차단하고 삭제하려면 다음을 수행합니다.
  • 영역의 대상을 DROP 으로 설정합니다.

    # firewall-cmd --permanent --set-target=DROP

이제 명시적으로 허용된 트래픽을 제외하고 ICMP 요청을 포함한 모든 트래픽이 삭제됩니다.

특정 ICMP 요청을 차단 및 삭제하고 다른 사용자를 허용하려면 다음을 수행합니다.

  1. 영역의 대상을 DROP 으로 설정합니다.

    # firewall-cmd --permanent --set-target=DROP
  2. 한 번에 모든 ICMP 요청을 차단하는 ICMP 블록 inversion을 추가합니다.

    # firewall-cmd --add-icmp-block-inversion
  3. 허용하려는 ICMP 요청에 대해 ICMP 블록을 추가합니다.

    # firewall-cmd --add-icmp-block=<icmptype>
  4. 새 설정을 영구적으로 설정합니다.

    # firewall-cmd --runtime-to-permanent

블록 inversionICMP 요청 블록을 반전시켜 이전에 차단되지 않은 모든 요청이 DROP 으로 영역 변경 대상으로 인해 차단됩니다. 차단된 요청은 차단되지 않습니다. 즉, 요청 차단을 해제하려면 차단 명령을 사용해야 합니다.

블록 인버전을 완전히 허용 설정으로 되돌리려면 다음을 수행합니다.

  1. 영역 대상을 기본값 또는 ACCEPT 로 설정합니다.

    # firewall-cmd --permanent --set-target=default
  2. ICMP 요청에 대해 추가된 모든 블록을 제거합니다.

    # firewall-cmd --remove-icmp-block=<icmptype>
  3. ICMP 블록 inversion을 제거합니다.

    # firewall-cmd --remove-icmp-block-inversion
  4. 새 설정을 영구적으로 설정합니다.

    # firewall-cmd --runtime-to-permanent

21.5.10.2. GUI를 사용하여 ICMP 필터 구성

  • ICMP 필터를 활성화하거나 비활성화하려면 firewall-config 툴을 시작하고 메시지를 필터링할 네트워크 영역을 선택합니다. ICMP 필터 탭을 선택하고 필터링할 각 ICMP 메시지 유형에 대한 확인란을 선택합니다. 확인란을 지워 필터를 비활성화합니다. 이 설정은 방향에 따라 설정되며 기본값은 모든 것을 허용합니다.
  • ICMP 필터 를 반전하려면 오른쪽에 있는 Invert Filter 확인란을 클릭합니다. 이제 표시된 ICMP 유형만 허용되며 다른 모든 항목은 거부됩니다. DROP 대상을 사용하는 영역에서는 해당 대상이 삭제됩니다.

21.5.11. firewalld를 사용하여 IP 세트 설정 및 제어

firewalld 에서 지원하는 IP 세트 유형 목록을 보려면 root로 다음 명령을 입력합니다.

# firewall-cmd --get-ipset-typeshash:ip hash:ip,mark hash:ip,port hash:ip,port,ip hash:ip,port,net hash:mac hash:net hash:net,iface hash:net,net hash:net,port hash:net,port,net

주의

Red Hat은 firewalld 를 통해 관리되지 않는 IP 세트를 사용하지 않는 것이 좋습니다. 이러한 IP 세트를 사용하려면 세트를 참조하려면 영구적인 직접 규칙이 필요하며 이러한 IP 세트를 생성하려면 사용자 지정 서비스를 추가해야 합니다. 이 서비스는 firewalld 를 시작하기 전에 시작해야 합니다. 그렇지 않으면 firewalld 가 이러한 세트를 사용하여 직접 규칙을 추가할 수 없습니다. /etc/firewalld/direct.xml 파일을 사용하여 영구적인 직접 규칙을 추가할 수 있습니다.

21.5.11.1. CLI를 사용하여 IP 세트 옵션 구성

IP 세트는 firewalld 영역에서 소스 및 리치 규칙의 소스로도 사용할 수 있습니다. Red Hat Enterprise Linux에서 기본 방법은 firewalld 를 사용하여 생성한 IP 세트를 직접 규칙으로 사용하는 것입니다.

  • 영구 환경에서 firewalld 에 알려진 IP 세트를 나열하려면 다음 명령을 root 로 사용합니다.

    # firewall-cmd --permanent --get-ipsets
  • 새 IP 세트를 추가하려면 영구 환경을 root 로 사용하여 다음 명령을 사용하십시오.

    # firewall-cmd --permanent --new-ipset=test --type=hash:netsuccess

    이전 명령은 이름이 test 인 새 IP 세트와 IPv4hash:net 유형을 생성합니다. IPv6 에서 사용할 IP 세트를 만들려면 --option=family=inet6 옵션을 추가합니다. 새 설정이 런타임 환경에서 적용되도록 하려면 firewalld 를 다시 로드합니다.

  • root 로 다음 명령을 사용하여 새 IP 세트를 나열합니다.

    # firewall-cmd --permanent --get-ipsetstest
  • IP 세트에 대한 자세한 정보를 얻으려면 root 로 다음 명령을 사용하십시오.

    # firewall-cmd --permanent --info-ipset=testtesttype: hash:netoptions:entries:

    현재 IP 세트에는 항목이 없습니다.

  • 테스트 IP 세트에 항목을 추가하려면 root 로 다음 명령을 사용하십시오.

    # firewall-cmd --permanent --ipset=test --add-entry=192.168.0.1success

    이전 명령은 IP 주소 192.168.0.1 을 IP 집합에 추가합니다.

  • IP 세트의 현재 항목 목록을 가져오려면 root 로 다음 명령을 사용하십시오.

    # firewall-cmd --permanent --ipset=test --get-entries192.168.0.1
  • IP 주소 목록이 포함된 iplist.txt 파일을 만듭니다. 예를 들면 다음과 같습니다.

    192.168.0.2192.168.0.3192.168.1.0/24192.168.2.254

    IP 집합의 IP 주소 목록이 있는 파일에는 행당 항목이 포함되어야 합니다. 해시, 세미콜론 또는 빈 행으로 시작하는 행은 무시됩니다.

  • iplist.txt 파일에서 주소를 추가하려면 root 로 다음 명령을 사용하십시오.

    # firewall-cmd --permanent --ipset=test --add-entries-from-file=iplist.txtsuccess
  • IP 세트의 확장 항목 목록을 보려면 root 로 다음 명령을 사용합니다.

    # firewall-cmd --permanent --ipset=test --get-entries192.168.0.1192.168.0.2192.168.0.3192.168.1.0/24192.168.2.254
  • IP 세트에서 주소를 제거하고 업데이트된 항목 목록을 확인하려면 root 로 다음 명령을 사용하십시오.

    # firewall-cmd --permanent --ipset=pass:_test_ --remove-entries-from-file=iplist.txtsuccess# firewall-cmd --permanent --ipset=test --get-entries192.168.0.1
  • IP 세트를 영역에 소스로 추가하여 영역으로 설정된 IP 세트에 나열된 주소에서 들어오는 모든 트래픽을 처리할 수 있습니다. 예를 들어 테스트 IP 세트를 소스로 추가하여 test IP 세트에 나열된 모든 항목에서 들어오는 모든 패킷을 삭제하려면 다음 명령을 root 로 사용합니다.

    # firewall-cmd --permanent --zone=drop --add-source=ipset:testsuccess

    소스의 ipset: 접두사는 소스가 IP 주소 또는 주소 범위가 아닌 IP 세트임을 firewalld 를 보여줍니다.

IP 세트 생성 및 제거만 영구 환경으로 제한되며 기타 모든 IP 세트 옵션은 --permanent 옵션 없이 런타임 환경에서도 사용할 수 있습니다.

21.5.12. 리치 규칙 우선순위 지정

기본적으로 리치 규칙은 규칙 동작을 기반으로 구성됩니다. 예를 들어 거부 규칙은 허용 규칙보다 우선합니다. 리치 규칙의 priority 매개 변수는 관리자가 리치 규칙과 실행 순서를 세부적으로 제어할 수 있습니다.

21.5.12.1. 우선순위 매개변수가 규칙을 다른 체인으로 구성하는 방법

리치 규칙의 priority 매개변수를 -32768 ~ 32767 사이의 숫자로 설정할 수 있으며 더 낮은 값이 우선순위가 높습니다.

firewalld 서비스는 우선순위 값에 따라 규칙을 다른 체인으로 구성합니다.

  • 0보다 낮은 우선 순위: 규칙이 _pre 접미사가 있는 체인으로 리디렉션됩니다.
  • 0보다 높은 우선 순위: 규칙이 _post 접미사가 있는 체인으로 리디렉션됩니다.
  • priority equals 0: action에 따라 규칙이 _log,_deny, 또는 _allow the action이 있는 체인으로 리디렉션됩니다.

이러한 하위 체인 내에서 firewalld 는 우선 순위 값에 따라 규칙을 정렬합니다.

21.5.12.2. 리치 규칙의 우선 순위 설정

다음은 priority 매개변수를 사용하여 다른 규칙에서 허용하거나 거부하지 않는 모든 트래픽을 기록하는 리치 규칙을 생성하는 방법의 예입니다. 이 규칙을 사용하여 예기치 않은 트래픽에 플래그를 지정할 수 있습니다.

절차

  • 우선 순위가 매우 낮은 리치 규칙을 추가하여 다른 규칙과 일치하지 않는 모든 트래픽을 기록합니다.

    # firewall-cmd --add-rich-rule='rule priority=32767 log prefix="UNEXPECTED: " limit value="5/m"'

    이 명령은 또한 로그 항목 수를 분당 5 개로 제한합니다.

검증

  • 이전 단계에서 생성된 명령을 사용하여 nftables 규칙을 표시합니다.

    # nft list chain inet firewalld filter_IN_public_posttable inet firewalld { chain filter_IN_public_post { log prefix "UNEXPECTED: " limit rate 5/minute }}

21.5.13. 방화벽 잠금 구성

로컬 애플리케이션 또는 서비스는 방화벽 구성이 root (예: libvirt)로 실행되는 경우 변경할 수 있습니다. 이 기능을 사용하면 관리자가 방화벽 구성을 잠글 수 있으므로 애플리케이션이 없거나 잠금 허용 목록에 추가된 애플리케이션만 방화벽 변경 사항을 요청할 수 있습니다. 기본적으로 잠금 설정이 비활성화됩니다. 활성화된 경우 로컬 애플리케이션 또는 서비스에서 방화벽에 대한 원하지 않는 구성 변경 사항이 없는지 확인할 수 있습니다.

21.5.13.1. CLI를 사용하여 잠금 구성

명령줄을 사용하여 잠금 기능을 활성화하거나 비활성화할 수 있습니다.

절차

  1. 잠금 해제 여부를 쿼리하려면 root 로 다음 명령을 사용하십시오.

    # firewall-cmd --query-lockdown

    이 명령은 잠금이 활성화된 경우 종료 상태가 0yes 를 출력합니다. 그렇지 않으면 종료 상태 1no 를 출력합니다.

  2. 잠금을 활성화하려면 root 로 다음 명령을 입력합니다.

    # firewall-cmd --lockdown-on
  3. 잠금을 비활성화하려면 root 로 다음 명령을 사용하십시오.

    # firewall-cmd --lockdown-off

21.5.13.2. CLI를 사용하여 잠금 허용 목록 옵션 구성

잠금 허용 목록에는 명령, 보안 컨텍스트, 사용자 및 사용자 ID가 포함될 수 있습니다. 허용 목록의 명령 항목이 별표 "*"로 끝나면 해당 명령으로 시작하는 모든 명령줄이 일치합니다. "*"가 없으면 인수를 포함한 절대 명령이 일치해야 합니다.

  • 컨텍스트는 실행 중인 애플리케이션 또는 서비스의 보안(SELinux) 컨텍스트입니다. 실행 중인 애플리케이션의 컨텍스트를 가져오려면 다음 명령을 사용합니다.

    $ ps -e --context

    이 명령은 실행 중인 모든 애플리케이션을 반환합니다. grep 툴을 통해 출력을 파이프하여 관심있는 애플리케이션을 가져옵니다. 예를 들면 다음과 같습니다.

    $ ps -e --context | grep example_program
  • 허용 목록에 있는 모든 명령줄을 나열하려면 root 로 다음 명령을 입력합니다.

    # firewall-cmd --list-lockdown-whitelist-commands
  • 허용 목록에 명령 명령을 추가하려면 root 로 다음 명령을 입력합니다.

    # firewall-cmd --add-lockdown-whitelist-command='/usr/bin/python3 -Es /usr/bin/command'
  • 허용 목록에서 명령을 제거하려면 root 로 다음 명령을 입력합니다.

    # firewall-cmd --remove-lockdown-whitelist-command='/usr/bin/python3 -Es /usr/bin/command'
  • 명령 명령이 허용 목록에 있는지 여부를 쿼리하려면 root 로 다음 명령을 입력합니다.

    # firewall-cmd --query-lockdown-whitelist-command='/usr/bin/python3 -Es /usr/bin/command'

    이 명령은 종료 상태 0 if true로 yes 를 출력합니다. 그렇지 않으면 종료 상태 1no 를 출력합니다.

  • 허용 목록에 있는 모든 보안 컨텍스트를 나열하려면 다음 명령을 root 로 입력합니다.

    # firewall-cmd --list-lockdown-whitelist-contexts
  • 허용 목록에 컨텍스트 컨텍스트 를 추가하려면 root 로 다음 명령을 입력합니다.

    # firewall-cmd --add-lockdown-whitelist-context=context
  • 허용 목록에서 컨텍스트 컨텍스트 를 제거하려면 root 로 다음 명령을 입력합니다.

    # firewall-cmd --remove-lockdown-whitelist-context=context
  • 컨텍스트 컨텍스트 가 허용 목록에 있는지 여부를 쿼리하려면 root 로 다음 명령을 입력합니다.

    # firewall-cmd --query-lockdown-whitelist-context=context

    exit status 0, if true를 사용하여 yes 를 출력합니다. 그렇지 않으면 종료 상태 1 로 출력합니다.

  • 허용 목록에 있는 모든 사용자 ID를 나열하려면 root 로 다음 명령을 입력합니다.

    # firewall-cmd --list-lockdown-whitelist-uids
  • 허용 목록에 사용자 ID 를 추가하려면 root 로 다음 명령을 입력합니다.

    # firewall-cmd --add-lockdown-whitelist-uid=uid
  • allowlist에서 사용자 ID를 제거하려면 root 로 다음 명령을 입력합니다.

    # firewall-cmd --remove-lockdown-whitelist-uid=uid
  • 사용자 ID uid 가 허용 목록에 있는지 쿼리하려면 다음 명령을 입력합니다.

    $ firewall-cmd --query-lockdown-whitelist-uid=uid

    exit status 0, if true를 사용하여 yes 를 출력합니다. 그렇지 않으면 종료 상태 1 로 출력합니다.

  • 허용 목록에 있는 모든 사용자 이름을 나열하려면 다음 명령을 root 로 입력합니다.

    # firewall-cmd --list-lockdown-whitelist-users
  • 사용자 이름 사용자를 허용 목록에 추가하려면 root 로 다음 명령을 입력합니다.

    # firewall-cmd --add-lockdown-whitelist-user=user
  • 허용 목록에서 사용자 이름을 제거하려면 root 로 다음 명령을 입력합니다.

    # firewall-cmd --remove-lockdown-whitelist-user=user
  • 사용자 이름 사용자가 허용 목록에 있는지 쿼리하려면 다음 명령을 입력합니다.

    $ firewall-cmd --query-lockdown-whitelist-user=user

    exit status 0, if true를 사용하여 yes 를 출력합니다. 그렇지 않으면 종료 상태 1 로 출력합니다.

21.5.13.3. 설정 파일을 사용하여 잠금 허용 목록 옵션 구성

기본 허용 목록 구성 파일에는 NetworkManager 컨텍스트와 libvirt 의 기본 컨텍스트가 포함되어 있습니다. 사용자 ID 0도 목록에 있습니다.

+ allowlist 구성 파일은 /etc/firewalld/ 디렉터리에 저장됩니다.

<?xml version="1.0" encoding="utf-8"?><whitelist> <selinux context="system_u:system_r:NetworkManager_t:s0"/> <selinux context="system_u:system_r:virtd_t:s0-s0:c0.c1023"/> <user id="0"/></whitelist>

다음은 사용자 ID가 815 인 사용자의 경우 firewall-cmd 유틸리티에 대한 모든 명령을 활성화하는 allowlist 설정 파일의 예입니다.

<?xml version="1.0" encoding="utf-8"?><whitelist> <command name="/usr/libexec/platform-python -s /bin/firewall-cmd*"/> <selinux context="system_u:system_r:NetworkManager_t:s0"/> <user id="815"/> <user name="user"/></whitelist>

이 예에서는 사용자 ID와 사용자 이름 을 모두 보여주지만 하나의 옵션만 필요합니다. Python은 인터프리터이며 명령줄 앞에 추가됩니다. 다음과 같은 특정 명령을 사용할 수도 있습니다.

# /usr/bin/python3 /bin/firewall-cmd --lockdown-on

이 예제에서는 --lockdown-on 명령만 허용됩니다.

Red Hat Enterprise Linux에서 모든 유틸리티는 /usr/bin/ 디렉토리에 배치되고 /bin/ 디렉토리는 /usr/bin/ 디렉토리에 대칭입니다. 즉, root 로 입력했을 때 firewall-cmd 의 경로는 /bin/firewall-cmd 로 확인될 수 있지만/usr/bin/firewall-cmd 를 사용할 수 있습니다. 모든 새 스크립트는 새 위치를 사용해야 합니다. 그러나 root 로 실행되는 스크립트가 /bin/firewall-cmd 경로를 사용하도록 작성된 경우 일반적으로 루트가 아닌 사용자에게만 사용되는 /usr/bin/firewall-cmd 경로 외에도 allowlist에 명령 경로를 추가해야 합니다.

명령의 name 특성 끝에 있는 * 는 이 문자열로 시작하는 모든 명령이 일치함을 의미합니다. * 가 없는 경우 인수를 포함한 절대 명령이 일치해야 합니다.

21.5.14. firewalld 영역에서 다양한 인터페이스 또는 소스 간 트래픽 전달 활성화

영역 내 전달은 firewalld 영역 내의 인터페이스 또는 소스 간 트래픽 전달을 활성화하는 firewalld 기능입니다.

21.5.14.1. 기본 타겟이 ACCEPT로 설정된 영역 내 전달과 영역의 차이점

영역 내 전달이 활성화되면 단일 firewalld 영역 내의 트래픽이 하나의 인터페이스 또는 소스에서 다른 인터페이스 또는 소스로 전달될 수 있습니다. zone은 인터페이스 및 소스의 신뢰 수준을 지정합니다. 신뢰 수준이 같으면 인터페이스 또는 소스 간 통신이 가능합니다.

firewalld 의 기본 영역에서 영역 내 전달을 활성화하는 경우 현재 기본 영역에 추가된 인터페이스와 소스에만 적용됩니다.

firewalld신뢰할 수 있는 영역은 기본 타겟을 ACCEPT 로 설정합니다. 이 영역은 전달된 모든 트래픽을 수락하며 영역 내 전달은 해당 트래픽에 적용되지 않습니다.

다른 기본 대상 값의 경우 전달된 트래픽은 기본적으로 삭제되며, 신뢰할 수 있는 영역을 제외한 모든 표준 영역에 적용됩니다.

21.5.14.2. 이더넷과 Wi-Fi 네트워크 간에 트래픽 전달을 위해 영역 내 전달

intra-zone 전달을 사용하여 동일한 firewalld 영역 내의 인터페이스와 소스 간에 트래픽을 전달할 수 있습니다. 예를 들어, 이 기능을 사용하여 enp1s0wlp0s20 에 연결된 Ethernet 네트워크 간 트래픽을 전달합니다.

절차

  1. 커널에서 패킷 전달을 활성화합니다.

    # echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf# sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
  2. 영역 내 전달을 활성화하려는 인터페이스가 내부 영역과 다른 영역에 할당되지 않은지 확인합니다.

    # firewall-cmd --get-active-zones
  3. 인터페이스가 현재 내부 이외의 영역에 할당되면 이를 다시 할당합니다.

    # firewall-cmd --zone=internal --change-interface=interface_name --permanent
  4. enp1s0wlp0s20 인터페이스를 내부 영역에 추가합니다.

    # firewall-cmd --zone=internal --add-interface=enp1s0 --add-interface=wlp0s20
  5. 영역 내 전달을 활성화합니다.

    # firewall-cmd --zone=internal --add-forward

검증

다음 확인 단계에서는 nmap-ncat 패키지가 두 호스트 모두에 설치되어 있어야 합니다.

  1. 영역 전달을 활성화한 호스트의 enp1s0 인터페이스와 동일한 네트워크에 있는 호스트에 로그인합니다.
  2. ncat 을 사용하여 echo 서비스를 시작하여 연결을 테스트합니다.

    # ncat -e /usr/bin/cat -l 12345
  3. wlp0s20 인터페이스와 동일한 네트워크에 있는 호스트에 로그인합니다.
  4. enp1s0 과 동일한 네트워크에 있는 호스트에서 실행 중인 에코 서버에 연결합니다.

    # ncat <other_host> 12345
  5. 임의의 내용을 입력하고 Enter 키를 누르고 텍스트가 다시 전송되었는지 확인합니다.

추가 리소스

  • firewalld.zones(5) 도움말 페이지

21.5.15. 시스템 역할을 사용하여 firewalld 구성

방화벽 시스템 역할을 사용하여 여러 클라이언트에서 한 번에 firewalld 서비스 설정을 구성할 수 있습니다. 이 해결책:

  • 효율적인 입력 설정을 제공하는 인터페이스를 제공합니다.
  • 원하는 모든 firewalld 매개변수를 한 곳에 보관합니다.

제어 노드에서 firewall 역할을 실행한 후 System Role은 firewalld 매개변수를 관리 노드에 즉시 적용한 후 재부팅해도 유지됩니다.

21.5.15.1. 방화벽 RHEL 시스템 역할 소개

RHEL 시스템 역할은 Ansible 자동화 유틸리티의 콘텐츠 세트입니다. Ansible 자동화 유틸리티와 함께 이 콘텐츠는 여러 시스템을 원격으로 관리할 수 있는 일관된 구성 인터페이스를 제공합니다.

RHEL 시스템 역할의 rhel-system-roles.firewall 역할이 firewalld 서비스의 자동 구성을 위해 도입되었습니다. rhel-system-roles 패키지에는 이 시스템 역할 및 참조 문서가 포함되어 있습니다.

firewalld 매개 변수를 하나 이상의 시스템에 자동화된 방식으로 적용하려면 플레이북에서 firewall System Role 변수를 사용합니다. 플레이북은 텍스트 기반 YAML 형식으로 작성된 하나 이상의 플레이 목록입니다.

인벤토리 파일을 사용하여 Ansible에서 구성할 시스템 세트를 정의할 수 있습니다.

firewall 역할을 사용하면 다음과 같이 다양한 firewalld 매개변수를 구성할 수 있습니다.

  • 영역.
  • 패킷을 허용해야 하는 서비스입니다.
  • 포트에 대한 트래픽 액세스 권한 부여, 거부 또는 삭제.
  • 영역의 포트 또는 포트 범위 전달.

추가 리소스

21.5.15.2. 방화벽 RHEL 시스템 역할을 사용하여 firewalld 설정 재설정

방화벽 RHEL 시스템 역할을 사용하면 firewalld 설정을 기본 상태로 재설정할 수 있습니다. 이전:replaced 매개변수를 변수 목록에 추가하면 System Role(시스템 역할)이 기존 사용자 정의 설정을 모두 제거하고 firewalld 를 기본값으로 재설정합니다. 이전:replaced 매개변수를 다른 설정과 결합하면 방화벽 역할은 새 설정을 적용하기 전에 기존 설정을 모두 제거합니다.

Ansible 제어 노드에서 다음 절차를 수행합니다.

사전 요구 사항

  • 제어 노드와 관리형 노드를 준비
  • 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
  • 관리형 노드에 연결하는 데 사용하는 계정에는 sudo 권한이 있습니다.
  • 이 플레이북을 실행하려는 관리형 노드 또는 관리형 노드 그룹은 Ansible 인벤토리 파일에 나열됩니다.

절차

  1. 다음과 같은 내용과 함께 플레이북 파일(예: ~/reset-firewalld.yml )을 생성합니다.

    ---- name: Reset firewalld example hosts: managed-node-01.example.com tasks: - name: Reset firewalld include_role: name: rhel-system-roles.firewall vars: firewall: - previous: replaced
  2. 플레이북을 실행합니다.

    # ansible-playbook ~/configuring-a-dmz.yml

검증

  • 이 명령을 관리 노드에서 root 로 실행하여 모든 영역을 확인합니다.

    # firewall-cmd --list-all-zones

추가 리소스

  • /usr/share/ansible/roles/rhel-system-roles.firewall/README.md
  • ansible-playbook(1)
  • firewalld(1)

21.5.15.3. 한 로컬 포트에서 다른 로컬 포트로 들어오는 트래픽 전달

firewall 역할을 사용하면 여러 관리 호스트에 지속적인 영향을 적용하여 firewalld 매개변수를 원격으로 구성할 수 있습니다.

Ansible 제어 노드에서 다음 절차를 수행합니다.

사전 요구 사항

  • 제어 노드와 관리형 노드를 준비
  • 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
  • 관리형 노드에 연결하는 데 사용하는 계정에는 sudo 권한이 있습니다.
  • 이 플레이북을 실행하려는 관리형 노드 또는 관리형 노드 그룹은 Ansible 인벤토리 파일에 나열됩니다.

절차

  1. 다음 콘텐츠를 사용하여 플레이북 파일(예: ~/port_forwarding.yml )을 생성합니다.

    ---- name: Configure firewalld hosts: managed-node-01.example.com tasks: - name: Forward incoming traffic on port 8080 to 443 include_role: name: rhel-system-roles.firewall vars: firewall: - { forward_port: 8080/tcp;443;, state: enabled, runtime: true, permanent: true }
  2. 플레이북을 실행합니다.

    # ansible-playbook ~/port_forwarding.yml

검증

  • 관리 호스트에서 firewalld 설정을 표시합니다.

    # firewall-cmd --list-forward-ports

추가 리소스

  • /usr/share/ansible/roles/rhel-system-roles.firewall/README.md

21.5.15.4. 시스템 역할을 사용하여 포트 구성

RHEL 방화벽 시스템 역할을 사용하여 들어오는 트래픽에 대해 로컬 방화벽에서 포트를 열거나 닫고 재부팅 후에도 새 구성을 유지할 수 있습니다. 예를 들어 HTTPS 서비스에 대한 들어오는 트래픽을 허용하도록 기본 영역을 구성할 수 있습니다.

Ansible 제어 노드에서 다음 절차를 수행합니다.

사전 요구 사항

  • 제어 노드와 관리형 노드를 준비
  • 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
  • 관리형 노드에 연결하는 데 사용하는 계정에는 sudo 권한이 있습니다.
  • 이 플레이북을 실행하려는 관리형 노드 또는 관리형 노드 그룹은 Ansible 인벤토리 파일에 나열됩니다.

절차

  1. 다음 콘텐츠를 사용하여 플레이북 파일(예: ~/opening-a-port.yml )을 생성합니다.

    ---- name: Configure firewalld hosts: managed-node-01.example.com tasks: - name: Allow incoming HTTPS traffic to the local host include_role: name: rhel-system-roles.firewall vars: firewall: - port: 443/tcp service: http state: enabled runtime: true permanent: true

    permanent: true 옵션을 사용하면 재부팅해도 새 설정이 유지됩니다.

  2. 플레이북을 실행합니다.

    # ansible-playbook ~/opening-a-port.yml

검증

  • 관리형 노드에서 HTTPS 서비스와 연결된 443/tcp 포트가 열려 있는지 확인합니다.

    # firewall-cmd --list-ports443/tcp

추가 리소스

  • /usr/share/ansible/roles/rhel-system-roles.firewall/README.md

21.5.15.5. firewalld RHEL 시스템 역할을 사용하여 DMZ firewalld 영역 구성

시스템 관리자는 방화벽 시스템 역할을 사용하여 enp1s0 인터페이스에서 dmz 영역을 구성하여 영역에 HTTPS 트래픽을 허용할 수 있습니다. 이렇게 하면 외부 사용자가 웹 서버에 액세스할 수 있습니다.

Ansible 제어 노드에서 다음 절차를 수행합니다.

사전 요구 사항

  • 제어 노드와 관리형 노드를 준비
  • 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
  • 관리형 노드에 연결하는 데 사용하는 계정에는 sudo 권한이 있습니다.
  • 이 플레이북을 실행하려는 관리형 노드 또는 관리형 노드 그룹은 Ansible 인벤토리 파일에 나열됩니다.

절차

  1. 다음 콘텐츠를 사용하여 플레이북 파일(예: ~/configuring-a-dmz.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 include_role: name: rhel-system-roles.firewall vars: firewall: - zone: dmz interface: enp1s0 service: https state: enabled runtime: true permanent: true
  2. 플레이북을 실행합니다.

    # ansible-playbook ~/configuring-a-dmz.yml

검증

  • 관리 노드에서 dmz 영역에 대한 자세한 정보를 확인합니다.

    # firewall-cmd --zone=dmz --list-alldmz (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

21.5.16. 추가 리소스

  • firewalld(1) 도움말 페이지
  • firewalld.conf(5) 도움말 페이지
  • firewall-cmd(1) 도움말 페이지
  • firewall-config(1) 도움말 페이지
  • firewall-offline-cmd(1) 도움말 페이지
  • firewalld.icmptype(5) 도움말 페이지
  • firewalld.ipset(5) 도움말 페이지
  • firewalld.service(5) 도움말 페이지
  • firewalld.zone(5) 도움말 페이지
  • firewalld.direct(5) 도움말 페이지
  • firewalld.lockdown-whitelist(5)
  • firewalld.richlanguage(5)
  • firewalld.zones(5) 도움말 페이지
  • firewalld.dbus(5) 도움말 페이지
21.5. firewalld 사용 및 구성 (2024)

References

Top Articles
Latest Posts
Article information

Author: Frankie Dare

Last Updated:

Views: 5615

Rating: 4.2 / 5 (73 voted)

Reviews: 80% of readers found this page helpful

Author information

Name: Frankie Dare

Birthday: 2000-01-27

Address: Suite 313 45115 Caridad Freeway, Port Barabaraville, MS 66713

Phone: +3769542039359

Job: Sales Manager

Hobby: Baton twirling, Stand-up comedy, Leather crafting, Rugby, tabletop games, Jigsaw puzzles, Air sports

Introduction: My name is Frankie Dare, I am a funny, beautiful, proud, fair, pleasant, cheerful, enthusiastic person who loves writing and wants to share my knowledge and understanding with you.