nftables에서 시간에 따라 패킷을 다르게 필터링하는 방법은 무엇입니까?

nftables에서 시간에 따라 패킷을 다르게 필터링하는 방법은 무엇입니까?

예를 들어 00:00부터 04:00 사이의 특정 트래픽을 차단하고 싶습니다. nftables에서 이것이 가능합니까?

(분명히 이 때 구성을 변경하기 위해 cron 작업을 설정할 수 있습니다. 하지만 이를 수행하는 nftables "기본" 방법이 있는지 궁금합니다.)

답변1

이를 수행하는 최근 패치가 있지만 아직 어떤 버전에서도 사용할 수 없습니다.

다음은 관련 패치입니다(단, 시리즈의 일부이므로 단독으로 적용하기에는 충분하지 않을 수 있습니다).

리눅스 커널:
[v5,2/2] netfilter: nft_meta: 시간 일치 지원

libnftnl(사용자 모드 하위 수준 nftables 라이브러리):
[libnftnl,v2,1/2] expr: 메타: NFT_META_TIME_{NS,DAY,HOUR}을 알려줍니다.

nftables(사용자 모드 명령):
[nft,2/4] 위안: '시간', '요일', '시'라는 새로운 조건 도입

몇 가지 사용 예:

  time < "2019-06-06 17:00" drop;
  time < "2019-06-06 17:20:20" drop;
  time < 12341234 drop;
  day "Saturday" drop;
  day 6 drop;
  hour >= 17:00 drop;
  hour >= "17:00:01" drop;
  hour >= 63000 drop;

[...]
우리는 교차 시간 범위(예: 23:15-03:22)를 올바르게 처리하기 위해 범위 내에서 왼쪽 및 오른쪽 값을 교환합니다.

2019년 8월 17일에 커널 패치가 제출되었지만, 반드시 이를 거쳐야 합니다.nf-다음,다음 네트워크그리고는5.4-rc1로 병합됨 2019년 9월 18일. 커널 5.4는 몇 주 내에 출시될 예정입니다.

따라서 위의 예를 기반으로 아직 테스트하지는 못했지만 커널 5.4, libnftnl 1.1을 사용하면 00:00에서 04:00 사이에 로컬 메일 서버로 들어오는 연결을 끊는 방법이 될 수 있습니다. .5 실행 중인가요? 그리고 nftables 0.9.3? :

#!/usr/sbin/nft -f

table inet filter {
    chain input {
        type filter hook input priority 0; policy accept;
        tcp dport 25 hour 00:00-04:00 drop
    }
}

관련 정보