2.9. nftables를 사용하여 연결 양 제한
nftables 를 사용하여 연결 수를 제한하거나 지정된 연결 양을 설정하려는 IP 주소를 차단하여 너무 많은 시스템 리소스를 사용할 수 있습니다.
2.9.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 주소를 나열합니다. 출력에 활성 연결 수 또는 연결이 거부된 경우 출력은 표시되지 않습니다.
2.9.2. 1분 이내에 10개 이상의 들어오는 TCP 연결을 시도하는 IP 주소 차단 링크 복사링크가 클립보드에 복사되었습니다!
1분 이내에 10개 이상의 IPv4 TCP 연결을 설정하는 호스트를 일시적으로 차단할 수 있습니다.
절차
ipaddress family로filter테이블을 생성합니다.# nft add table ip filter필터테이블에입력체인을 추가합니다.# nft add chain ip filter input { type filter hook input priority 0 \; }filter테이블에 denylist라는세트를 추가합니다.# nft add set ip filter denylist { type ipv4_addr \; flags dynamic, timeout \; timeout 5m \; }이 명령은 IPv4 주소에 대한 동적 세트를 생성합니다.
timeout 5m매개변수는 설정된 값이 오래된 항목으로 채워지지 않도록 5분 후에nftables가 자동으로 항목을 제거함을 정의합니다.1분 내에 새 TCP 연결을 허용하려는 호스트의 소스 IP 주소를 거부 목록에 자동으로 추가하는 규칙을 추가합니다.
# nft add rule ip filter input ip protocol tcp ct state new, untracked add @denylist { ip saddr limit rate over 10/minute } drop