Red Hat Training

A Red Hat training course is available for RHEL 8

41.9. nftables를 사용하여 연결 양 제한

nftables 를 사용하여 연결 수를 제한하거나 지정된 양의 연결을 설정하려는 IP 주소를 차단하여 너무 많은 시스템 리소스를 사용하지 않도록 할 수 있습니다.

41.9.1. nftables를 사용하여 연결 수 제한

nft 유틸리티의 ct count 매개변수를 사용하면 관리자가 연결 수를 제한할 수 있습니다.

사전 요구 사항

  • example_table 의 기본 example_chain 이 존재합니다.

절차

  1. IPv4 주소에 대한 동적 세트를 만듭니다.

    # nft add set inet example_table example_meter { type ipv4_addr\; flags dynamic \;}
  2. IPv4 주소에서 SSH 포트 (22)에 대한 동시 연결만 허용하는 규칙을 추가하고 동일한 IP의 모든 추가 연결을 거부합니다.

    # nft add rule ip example_table example_chain tcp dport ssh meter example_meter { ip saddr ct count over 2 } counter reject
  3. 선택 사항: 이전 단계에서 만든 세트를 표시합니다.

    # nft list set inet example_table example_meter
    table inet example_table {
      meter example_meter {
        type ipv4_addr
        size 65535
        elements = { 192.0.2.1 ct count over 2 , 192.0.2.2 ct count over 2  }
      }
    }

    elements 항목은 현재 규칙과 일치하는 주소를 표시합니다. 이 예제에서 요소는 SSH 포트에 활성 연결이 있는 IP 주소를 나열합니다. 출력에는 활성 연결 또는 연결이 거부된 경우 출력에 표시되지 않습니다.

41.9.2. 1분 내에 새로 들어오는 TCP 연결을 10개 이상 시도하는 IP 주소 차단

1분 이내에 10개 이상의 IPv4 TCP 연결을 설정하는 호스트를 일시적으로 차단할 수 있습니다.

절차

  1. ip address family를 사용하여 필터 테이블을 생성합니다.

    # nft add table ip filter
  2. 필터 테이블에 입력 체인을 추가합니다.

    # nft add chain ip filter input { type filter hook input priority 0 \; }
  3. 소스 주소에서 1분 내에 10개 이상의 TCP 연결을 설정하는 모든 패킷을 삭제하는 규칙을 추가합니다.

    # nft add rule ip filter input ip protocol tcp ct state new, untracked meter ratemeter { ip saddr timeout 5m limit rate over 10/minute } drop

    시간 초과 5m 매개변수는 계측이 오래된 항목으로 채워지지 않도록 nftables 가 5분 후에 자동으로 항목을 제거하도록 정의합니다.

검증

  • 미터의 콘텐츠를 표시하려면 다음을 입력합니다.

    # nft list meter ip filter ratemeter
    table ip filter {
      meter ratemeter {
        type ipv4_addr
        size 65535
        flags dynamic,timeout
        elements = { 192.0.2.1 limit rate over 10/minute timeout 5m expires 4m58s224ms }
      }
    }