대상 OS: Rocky Linux 9

포트 스캔은 침해의 ‘시작 버튼’입니다.
자동화된 스캐너는 짧은 시간에 수천~수만 개의 포트를 두드리며, 열려 있는 서비스와 배너를 수집하고 취약점 익스플로잇으로 이어집니다.
방화벽에서 “필요한 포트만 열기”는 기본이지만, 그 다음 단계로는 스캔 자체를 느리게 만들고(레이트 리밋), 흔적을 남기고(로그), 특정 패턴을 조기에 차단하는(스텔스 스캔 탐지) 운영이 효과적입니다.
Rocky Linux 9에서는 nftables를 표준 방화벽 엔진으로 활용해 SYN/NULL/XMAS 같은 스캔 패턴을 억제하고, SSH/HTTP 같은 핵심 서비스 앞단을 더 단단하게 만들 수 있습니다.
오늘은 “기본 정책은 단순하게 유지하면서, 스캔 억제 규칙을 별도 체인으로 분리”하는 운영형 구성을 정리합니다.

---

# 1) 전제: firewalld 대신 nftables를 직접 쓸 때의 원칙

1) 충돌 방지

- firewalld가 동작 중이면 nftables 규칙이 덮이거나 혼선이 생길 수 있습니다.
- 이 글은 nftables를 직접 관리하는 전제를 둡니다.

sudo systemctl is-active firewalld 2>/dev/null || true
sudo nft list ruleset | head -n 40

2) 원격 서버 안전 수칙

- SSH로 작업 중이면, 적용 전에 ‘현재 세션 유지’ + 새 세션 하나 더 확보
- 규칙 적용은 `nft -f`로 한 번에, 그리고 즉시 롤백 파일 준비

---

# 2) 목표 정책(요약)

1) 인바운드 기본값은 drop

2) 이미 허용된 서비스(예: 22/80/443)만 accept

3) 포트스캔/스텔스 스캔 패턴은 빠르게 drop + (선택) 로그

4) SYN flood/대량 연결은 rate limit으로 완화

---

# 3) nftables 활성화 및 기본 구조 만들기

1) 패키지 및 서비스

sudo dnf install -y nftables
sudo systemctl enable --now nftables
sudo systemctl --no-pager -l status nftables | sed -n '1,60p'

2) 현재 규칙 백업(중요)

sudo nft list ruleset > /root/nft.ruleset.backup.$(date +%F_%H%M%S).nft

3) 새 규칙 파일 작성

- `/etc/nftables.conf`에 운영형 기본 정책 + 스캔 억제 체인을 구성합니다.

sudo bash -lc 'cat >/etc/nftables.conf