검색

17.14.11.6. 샘플 사용자 정의 필터

download PDF
위의 XML의 규칙 중 하나에 소스 또는 대상 주소로 게스트 가상 시스템의 IP 주소가 포함되어 있지만 트래픽 필터링이 올바르게 작동합니다. 그 이유는 규칙의 평가가 인터페이스별로 내부적으로 수행되는 반면 규칙은 소스 또는 대상 IP 주소가 아닌 패킷을 전송하거나 수신하는 패킷을 기반으로 추가로 평가됩니다.

예 17.12. 네트워크 인터페이스 설명을 위한 XML 샘플

테스트 게스트 가상 머신의 도메인 XML 내에 있는 가능한 네트워크 인터페이스 설명에 대한 XML 조각은 다음과 같을 수 있습니다.
   [...]
    <interface type='bridge'>
      <source bridge='mybridge'/>
      <filterref filter='test-eth0'/>
    </interface>
   [...]
ICMP 트래픽을 보다 엄격하게 제어하고 게스트 가상 시스템에서 ICMP 에코 요청만 보낼 수 있고, 게스트 가상 시스템에서 ICMP 에코 응답만 수신하도록 하려면 위의 ICMP 규칙을 다음 두 가지 규칙으로 교체할 수 있습니다.
  <!- - enable outgoing ICMP echo requests- ->
  <rule action='accept' direction='out'>
    <icmp type='8'/>
  </rule>
  <!- - enable incoming ICMP echo replies- ->
  <rule action='accept' direction='in'>
    <icmp type='0'/>
  </rule>

예 17.13. 두 번째 예제 사용자 정의 필터

이 예제에서는 위의 예제와 같이 유사한 필터를 빌드하는 방법을 설명하지만 게스트 가상 시스템 내부에 있는 ftp 서버를 사용하여 요구 사항 목록을 확장합니다. 이 필터의 요구 사항은 다음과 같습니다.
  • 게스트 가상 머신의 인터페이스가 MAC, IP, ARP 스푸핑에서 방지
  • 게스트 가상 머신의 인터페이스에서 TCP 포트 22 및 80만 엽니 다
  • 게스트 가상 시스템이 인터페이스에서 ping 트래픽을 보낼 수 있지만 인터페이스에서 게스트 가상 시스템을 ping하는 것을 허용하지 않습니다.
  • 게스트 가상 머신이 DNS 조회를 수행할 수 있도록 허용 (UDP 포트 53으로)
  • 게스트 가상 머신 내에서 실행할 수 있도록 ftp 서버(활성 모드)를 활성화합니다.
FTP 서버가 FTP 제어 트래픽에 대해 포트 21에 도달할 수 있도록 하는 요구 사항 및 게스트 가상 머신의 TCP 포트 20에서 FTP 클라이언트( FTP 클라이언트)로 시작하는 발신 TCP 연결을 설정할 수 있도록 하는 요구 사항입니다. 이 필터를 작성하는 방법에는 여러 가지가 있으며 이 예제에는 두 가지 가능한 솔루션이 포함됩니다.
첫 번째 솔루션은 Linux 호스트 물리적 시스템의 연결 추적 프레임워크에 후크를 제공하는 TCP 프로토콜의 state 속성을 사용합니다. 게스트 가상 머신 시작 FTP 데이터 연결( SFTP 활성 모드)의 경우 RELATED 상태는 게스트 가상 머신 시작 FTP 데이터 연결이 (또는 '관계가 있는 관계)의 결과이며, 방화벽을 통해 패킷을 전달할 수 있음을 감지하는 데 사용됩니다. 그러나 RELATED 상태는 FTP 데이터 경로에 대한 발신 TCP 연결의 첫 번째 패킷에만 유효합니다. 그 후, 상태는 ESTABLISHED이며, 이는 수신 및 발신 방향에도 동일하게 적용됩니다. 이 모든 것은 게스트 가상 머신의 TCP 포트 20에서 발생하는 FTP 데이터 트래픽과 관련이 있습니다. 그러면 다음과 같은 해결 방법이 제공됩니다.
<filter name='test-eth0'>
  <!- - This filter (eth0) references the clean traffic filter to prevent MAC, IP, and ARP spoofing. By not providing an IP address parameter, libvirt will detect the IP address the guest virtual machine is using. - ->
  <filterref filter='clean-traffic'/>

  <!- - This rule enables TCP port 21 (FTP-control) to be reachable - ->
  <rule action='accept' direction='in'>
    <tcp dstportstart='21'/>
  </rule>

  <!- - This rule enables TCP port 20 for guest virtual machine-initiated FTP data connection related to an existing FTP control connection - ->
  <rule action='accept' direction='out'>
    <tcp srcportstart='20' state='RELATED,ESTABLISHED'/>
  </rule>

  <!- - This rule accepts all packets from a client on the FTP data connection - ->
  <rule action='accept' direction='in'>
    <tcp dstportstart='20' state='ESTABLISHED'/>
  </rule>

  <!- - This rule enables TCP port 22 (SSH) to be reachable - ->
  <rule action='accept' direction='in'>
    <tcp dstportstart='22'/>
  </rule>

  <!- -This rule enables TCP port 80 (HTTP) to be reachable - ->
  <rule action='accept' direction='in'>
    <tcp dstportstart='80'/>
  </rule>

  <!- - This rule enables general ICMP traffic to be initiated by the guest virtual machine, including ping traffic - ->
  <rule action='accept' direction='out'>
    <icmp/>
  </rule>

  <!- - This rule enables outgoing DNS lookups using UDP - ->
  <rule action='accept' direction='out'>
    <udp dstportstart='53'/>
  </rule>

  <!- - This rule drops all other traffic - ->
  <rule action='drop' direction='inout'>
    <all/>
  </rule>

</filter>
RELATED 상태를 사용하여 필터를 시도하기 전에 적절한 연결 추적 모듈이 호스트 물리적 시스템의 커널에 로드되었는지 확인해야 합니다. 커널 버전에 따라 게스트 가상 머신과 FTP 연결이 설정되기 전에 다음 두 명령 중 하나를 실행해야 합니다.
  • modprobe nf_conntrack_ftp - 사용 가능한 경우
  • 위의 모듈을 사용할 수 없는 경우 modprobe ip_conntrack_ftp
FTP 이외의 프로토콜이 RELATED 상태와 함께 사용되는 경우 해당 모듈을 로드해야 합니다. 모듈은 ftp, tftp, irc, sip, sctp, amanda 프로토콜에서 사용할 수 있습니다.
두 번째 해결책은 이전 솔루션보다 더 많은 연결의 상태 플래그를 사용합니다. 이 솔루션은 트래픽 흐름의 첫 번째 패킷이 감지될 때 연결의 NEW 상태가 유효함을 활용할 수 있습니다. 그 후, 흐름의 첫 번째 패킷이 허용되면 흐름은 연결이 되어, 이에 따라 IKEvBLISHED 상태가 됩니다. 따라서 ESTABLISHED 연결의 패킷을 게스트 가상 머신에 도달하거나 게스트 가상 머신에서 보낼 수 있도록 일반 규칙을 작성할 수 있습니다. 이 작업은 NEW 상태에서 식별되는 첫 번째 패킷에 대해 특정 규칙을 작성하고 데이터가 허용 가능한 포트를 지시합니다. 명시적으로 승인되지 않은 포트에 대해 예약된 모든 패킷은 삭제되므로, ESTABLISHED 상태에 도달하지 않습니다. 해당 포트에서 전송된 후속 패킷도 삭제됩니다.
<filter name='test-eth0'>
  <!- - This filter references the clean traffic filter to prevent MAC, IP and ARP spoofing. By not providing and IP address parameter, libvirt will detect the IP address the VM is using. - ->
  <filterref filter='clean-traffic'/>

  <!- - This rule allows the packets of all previously accepted connections to reach the guest virtual machine - ->
  <rule action='accept' direction='in'>
    <all state='ESTABLISHED'/>
  </rule>

  <!- - This rule allows the packets of all previously accepted and related connections be sent from the guest virtual machine - ->
  <rule action='accept' direction='out'>
    <all state='ESTABLISHED,RELATED'/>
  </rule>

  <!- - This rule enables traffic towards port 21 (FTP) and port 22 (SSH)- ->
  <rule action='accept' direction='in'>
    <tcp dstportstart='21' dstportend='22' state='NEW'/>
  </rule>

  <!- - This rule enables traffic towards port 80 (HTTP) - ->
  <rule action='accept' direction='in'>
    <tcp dstportstart='80' state='NEW'/>
  </rule>

  <!- - This rule enables general ICMP traffic to be initiated by the guest virtual machine, including ping traffic - ->
  <rule action='accept' direction='out'>
    <icmp state='NEW'/>
  </rule>

  <!- - This rule enables outgoing DNS lookups using UDP - ->
  <rule action='accept' direction='out'>
    <udp dstportstart='53' state='NEW'/>
  </rule>

  <!- - This rule drops all other traffic - ->
  <rule action='drop' direction='inout'>
    <all/>
  </rule>

</filter>
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.