8.8. nftables를 사용하여 연결 수 제한
nftables 를 사용하여 연결 수를 제한하거나 지정된 양의 연결을 설정하여 시스템 리소스를 너무 많이 사용하지 못하도록 하는 IP 주소를 차단할 수 있습니다.
8.8.1. nftables를 사용하여 연결 수 제한 링크 복사링크가 클립보드에 복사되었습니다!
nft 유틸리티의 ct count 매개변수를 사용하면 IP 주소당 동시 연결 수를 제한할 수 있습니다. 예를 들어 이 기능을 사용하여 각 소스 IP 주소가 호스트에 대한 두 개의 병렬 SSH 연결만 설정할 수 있도록 구성할 수 있습니다.
프로세스
inet주소 제품군을 사용하여filter테이블을 생성합니다.# nft add table inet filterinet 필터테이블에입력체인을 추가합니다.# nft add chain inet filter input { type filter hook input priority 0 \; }IPv4 주소에 대한 동적 세트를 생성합니다.
# nft add set inet filter limit-ssh { type ipv4_addr\; flags dynamic \;}IPv4 주소에서 SSH 포트(22)에 동시에 들어오는 연결만 허용하는
입력체인에 규칙을 추가하고 동일한 IP에서 추가 연결을 모두 거부합니다.# nft add rule inet filter input tcp dport ssh ct state new add @limit-ssh { ip saddr ct count over 2 } counter reject
검증
- 동일한 IP 주소에서 호스트로의 두 개 이상의 새 동시 SSH 연결을 설정합니다. 두 연결이 이미 설정된 경우 nftables는 SSH 포트에 대한 연결을 거부합니다.
limit-ssh동적 세트를 표시합니다.# nft list set inet filter limit-ssh table inet filter { set limit-ssh { type ipv4_addr size 65535 flags dynamic elements = { 192.0.2.1 ct count over 2 , 192.0.2.2 ct count over 2 } } }elements항목에는 현재 규칙과 일치하는 주소가 표시됩니다. 이 예제에서요소는SSH 포트에 대한 활성 연결이 있는 IP 주소를 나열합니다. 출력은 활성 연결 수를 표시하지 않거나 연결이 거부된 경우입니다.
8.8.2. 1분 이내에 10개 이상의 새 들어오는 TCP 연결을 시도하는 IP 주소 차단 링크 복사링크가 클립보드에 복사되었습니다!
1분 이내에 10개 이상의 IPv4 TCP 연결을 설정하는 호스트를 일시적으로 차단할 수 있습니다.
프로세스
IP 주소 제품군을 사용하여
필터테이블을 생성합니다.# nft add table ip filter필터테이블에입력체인을 추가합니다.# nft add chain ip filter input { type filter hook input priority 0 \; }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 } droptimeout 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 } } }