18.12.2. 필터링 체인
필터링 규칙은 필터 체인에서 구성됩니다. 이러한 체인은 패킷 필터링 규칙을 개별 체인(branches)의 항목으로 사용하는 트리 구조로 간주할 수 있습니다.
패킷은 루트 체인에서 필터 평가를 시작한 다음 다른 체인에서 평가를 계속하거나 해당 체인에서 다시 루트 체인으로 반환하거나 트래버스 체인 중 하나에서 필터링 규칙에 의해 삭제 또는 수락할 수 있습니다.
libvirt의 네트워크 필터링 시스템은 사용자가 트래픽 필터링을 활성화하도록 선택하는 모든 가상 시스템의 네트워크 인터페이스에 대해 개별 루트 체인을 자동으로 생성합니다. 사용자는 루트 체인에서 직접 인스턴스화되는 필터링 규칙을 작성하거나 프로토콜별 규칙의 효율적인 평가를 위해 프로토콜별 필터링 체인을 생성할 수 있습니다.
다음과 같은 체인이 있습니다.
- 루트
- mac
- STP(범위 트리 프로토콜)
- vlan
- ARP 및 rarp
- ipv4
- ipv6
mac, stp, vlan, arp, rarp, ipv4, 또는 ipv6 프로토콜을 평가하는 여러 체인은 체인 이름의 접두사로만 프로토콜 이름을 사용하여 생성할 수 있습니다.
예 18.3. ARP 트래픽 필터링
이 예제에서는 이름이 arp-xyz 또는 arp-test인 체인을 지정할 수 있으며 해당 체인에서 ARP 프로토콜 패킷을 평가하도록 합니다.
다음 필터 XML은 arp 체인에서 ARP 트래픽을 필터링하는 예를 보여줍니다.
<filter name='no-arp-spoofing' chain='arp' priority='-500'> <uuid>f88f1932-debf-4aa1-9fbe-f10d3aa4bc95</uuid> <rule action='drop' direction='out' priority='300'> <mac match='no' srcmacaddr='$MAC'/> </rule> <rule action='drop' direction='out' priority='350'> <arp match='no' arpsrcmacaddr='$MAC'/> </rule> <rule action='drop' direction='out' priority='400'> <arp match='no' arpsrcipaddr='$IP'/> </rule> <rule action='drop' direction='in' priority='450'> <arp opcode='Reply'/> <arp match='no' arpdstmacaddr='$MAC'/> </rule> <rule action='drop' direction='in' priority='500'> <arp match='no' arpdstipaddr='$IP'/> </rule> <rule action='accept' direction='inout' priority='600'> <arp opcode='Request'/> </rule> <rule action='accept' direction='inout' priority='650'> <arp opcode='Reply'/> </rule> <rule action='drop' direction='inout' priority='1000'/> </filter>
예를 들어 루트 체인에서 아닌 ARP 관련 규칙을 arp 체인에 배치한 결과 ARP 이외의 패킷 프로토콜을 ARP 프로토콜별 규칙으로 평가할 필요가 없습니다. 이렇게 하면 트래픽 필터링의 효율성이 향상됩니다. 그러나 다른 규칙이 평가되지 않으므로 지정된 프로토콜에 대한 필터링 규칙만 체인에 배치하는 데 주의를 기울여야 합니다. 예를 들어 IPv4 프로토콜 패킷이 ARP 체인을 통과하지 않기 때문에 IPv4 규칙이 ARP 체인에서 평가되지 않습니다.