지식 베이스

합리적인 nftables 기준선

인스턴스가 실제로 필요로 하는 것을 허용하고, SSH를 속도 제한하며, 작성하는 동안 잠기지 않는 기본 거부 규칙 세트.

방화벽 하나, 두 개 아님

Debian 13은 /etc/nftables.conf과 이를 로드하는 서비스와 함께 nftables를 제공한다. AlmaLinux 10은 nftables 위에 firewalld를 제공하며, 그 서비스는 /etc/sysconfig/nftables.conf이 포함하는 것을 읽는다. 하나를 선택하십시오. firewalld를 수제 규칙 세트와 함께 실행하면 둘 다 작성하지 않은 규칙 세트가 생성된다.

systemctl disable --now firewalld     # AlmaLinux, if going manual
systemctl enable --now nftables

규칙 세트

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
  set ssh_flood {
    type ipv4_addr
    flags dynamic, timeout
    timeout 1h
  }

  chain input {
    type filter hook input priority filter; policy drop;

    ct state established,related accept
    ct state invalid drop
    iif lo accept

    ip protocol icmp icmp type { echo-request, destination-unreachable, time-exceeded } accept
    ip6 nexthdr ipv6-icmp accept

    tcp dport 22 ct state new add @ssh_flood { ip saddr limit rate over 6/minute } drop
    tcp dport 22 accept
    tcp dport { 80, 443 } accept
    udp dport 443 accept

    counter comment "dropped by policy"
  }

  chain forward {
    type filter hook forward priority filter; policy drop;
  }

  chain output {
    type filter hook output priority filter; policy accept;
  }
}

사람들이 틀리는 부분:

  • ICMPv6는 의도적으로 전체 수락된다. 이웃 발견과 패킷-너무-큼이 모두 거기에 있으며, 수동으로 필터링하면 하루 반 동안 애플리케이션 버그로 보이는 방식으로 IPv6를 깨뜨린다.
  • ssh_flood 세트는 분당 6개를 초과하는 새 연결의 주소를 1시간 시간 초과 목록에 추가한다. 로그 파서, cron 작업, 두 번째 데몬 없음.
  • IPv6의 경우 type ipv6_addr으로 세트를, ip6 saddr으로 규칙을 복제하십시오. 세트는 단일 패밀리다.
  • udp dport 443은 QUIC를 위한 것이다. 제공하지 않으면 삭제하십시오.

잠기지 않고 로드하기

systemd-run --on-active=120 nft flush ruleset
nft -f /etc/nftables.conf

첫 번째 명령은 2분 후에 규칙 세트를 지우고 이름을 인쇄하는 일시적 유닛을 예약한다. 새 세션을 여십시오. 작동하면 타이머를 중지하십시오:

systemctl stop run-u1234.timer

작동하지 않으면 기다리면 머신이 스스로 다시 들어오게 한다. 빈 규칙 세트는 필터링이 없음을 의미하므로, 밤새 그대로 두지 말고 일을 끝내십시오.

실제로 무엇을 하는지 확인

nft list ruleset
nft -a list chain inet filter input
nft list set inet filter ssh_flood

-a은 핸들을 인쇄하며, 파일을 다시 쓰지 않고 단일 규칙을 제거하는 방법이다:

nft delete rule inet filter input handle 12

카운터는 아무도 묻지 않는 질문에 답한다: 일주일 후 0에 있는 규칙은 틀렸거나 불필요하며, 둘 다 알 가치가 있다.

추적

패킷이 규칙 세트가 말하는 대로 행동하기를 거부할 때:

nft add rule inet filter input tcp dport 8443 meta nftrace set 1
nft monitor trace

나중에 추적 규칙을 삭제하십시오. 무료가 아니라 저렴하다.

호스트 방화벽이 아닌 것

정책을 필터링하지, 홍수를 필터링하지 않는다. 대규모 공격은 포트에 도달하기 훨씬 전에 가장자리에서 차단되며, 인스턴스의 규칙은 이미 처리된 패킷에 CPU를 소비할 뿐이다. 자세한 내용은 DDoS 보호 참조.

영구화

nft list ruleset > /etc/nftables.conf
systemctl restart nftables

쉬방과 flush ruleset 줄을 내보낸 파일 맨 위에 다시 넣으십시오. 없으면 다음 로드가 실행 중인 규칙 세트에 추가하여 대체하지 않으며, 모든 규칙이 두 번 나타난다.

준비 완료

도시를 고르고, 크기를 고르고, 코인으로 결제하세요.

신원 확인 양식도, 승인을 기다리는 담당자도, 검증을 위한 전화도 없습니다. 청구서가 결제되면 자격 증명이 받은 편지함에 도착합니다.