nftables: 더 복잡한 규칙
ufw로 부족할 때를 다뤄요. nftables 테이블과 체인의 구조, 바로 쓸 수 있는 설정, 주소 집합, 속도 제한, 포트 포워딩을 설명해요.
업데이트 2026년 8월 23일
nftables는 ufw가 그 위에서 동작하는 바로 그 커널 메커니즘이에요. 이름이 붙은 주소 집합, 속도 제한, 인터페이스별로 다른 정책, 포트 포워딩이 필요할 때 — 즉 규칙이 더 이상 "포트 허용" 수준에 머물지 않을 때 — 직접 사용해야 해요.
두 도구를 동시에 쓸 필요는 없어요. 전환하기 전에 ufw disable로 ufw를 비활성화하세요. 그렇지 않으면 규칙이 겹쳐서 디버깅할 때 혼란스러워져요.
구조
규칙은 테이블에 있고, 테이블은 체인을 담고, 체인은 규칙을 담아요. 체인은 패킷 처리 단계(input, forward, output)에 묶이고 기본 정책을 가져요.
apt install -y nftables
systemctl enable --now nftables
nft list ruleset
동작하는 설정
파일 /etc/nftables.conf:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
set admins {
type ipv4_addr
elements = { 203.0.113.5, 198.51.100.7 }
}
chain input {
type filter hook input priority 0; policy drop;
iif lo accept
ct state established,related accept
ct state invalid drop
ip protocol icmp icmp type echo-request limit rate 5/second accept
tcp dport 22 ip saddr @admins accept
tcp dport 22 ct state new limit rate 6/minute accept
tcp dport { 80, 443 } accept
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
적용하고 저장하세요:
nft -c -f /etc/nftables.conf
nft -f /etc/nftables.conf
systemctl restart nftables
-c 플래그는 규칙을 적용하지 않고 문법만 검사해요. 항상 사용하세요. 오타가 있는 drop 정책은 접근을 끊어버리므로 /hosting/vds/m/<id> 패널의 콘솔을 통해 다시 들어와야 해요.
주소 집합과 속도 제한
이름이 붙은 집합은 규칙을 다시 불러오지 않고 즉시 편집할 수 있어요:
nft add element inet filter admins { 192.0.2.10 }
nft delete element inet filter admins { 198.51.100.7 }
nft list set inet filter admins
타임아웃이 있는 동적 집합은 사용자 지정 차단에 편리해요:
set blocked {
type ipv4_addr
flags timeout
timeout 1h
}
포워딩과 주소 대체
내부에서 컨테이너나 터널이 실행 중일 때 필요해요:
table ip nat {
chain prerouting {
type nat hook prerouting priority -100;
tcp dport 8443 dnat to 10.10.0.2:443
}
chain postrouting {
type nat hook postrouting priority 100;
oifname "eth0" masquerade
}
}
흔한 실수
| 실수 | 결과 | 해결책 |
|---|---|---|
ct state established 규칙 없음 | 나가는 요청에 대한 응답이 차단됨 | 첫 번째 규칙으로 추가하세요 |
iif lo accept를 잊음 | 로컬 서비스와 데이터베이스가 깨짐 | 루프백 인터페이스를 허용하세요 |
| 규칙을 적용했지만 저장하지 않음 | 재부팅 후 모든 것이 열림 | /etc/nftables.conf에 기록하세요 |
| ufw와 nftables를 함께 사용 | 예측할 수 없는 결과 | 도구를 하나만 유지하세요 |
사용 중인 세션을 닫지 않은 채 별도의 세션에서 새 규칙 집합을 테스트하세요. 간단한 안전장치로 백그라운드에서
sleep 300 && nft flush ruleset을 실행하세요 — 스스로 접근을 차단해도 접근이 자동으로 복구돼요.
이런 세부 사항이 필요 없다면 ufw로 돌아가세요. 대부분의 작업을 처리해 줘요.