016. Linux 서버 보안 — nftables 규칙셋 점검과 차단 로깅

changseop lee·6일 전

시스템 보안 · 취약점 › A. Linux 서버 보안 설정 · 16/50편 (전체 016/450)
학습 단계: 2단계 · 설정 및 점검
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

Linux 방화벽의 실제 처리는 커널의 netfilter가 담당하고, iptables·nftables는 그 규칙을 넣는 도구입니다.

   firewall-cmd (firewalld)       ufw (Ubuntu)
            ↓                          ↓
     nftables (Rocky 9 백엔드)    iptables-nft / nft (Ubuntu 22.04)
            ↓                          ↓
          ┌──────── netfilter (커널) ────────┐
          │ hook: prerouting/input/forward/output/postrouting │
          └──────────────────────────────────┘

Rocky 9의 firewalld는 nftables를 백엔드로 쓰고, Ubuntu 22.04의 iptables 명령은 기본적으로 iptables-nft(nftables 위에서 동작하는 호환 계층)입니다. 그래서 어떤 도구로 넣었든 nft list ruleset으로 전체 실효 규칙을 볼 수 있습니다.

2. 왜 중요한가

  • firewalld 화면에는 보이지 않지만 nft나 iptables로 직접 추가된 규칙이 존재할 수 있습니다. 공격자가 특정 IP만 허용하는 은밀한 규칙을 넣으면 firewalld 점검으로는 놓칩니다.
  • 반대로 출발지 IP를 차단하는 대응 조치도 결국 이 계층에서 이뤄지므로, 규칙 구조를 이해해야 대응이 빠릅니다.
  • 기본 정책(policy)이 accept인지 drop인지가 전체 노출 수준을 결정합니다.

3. 핵심 명령어 / 설정

명령용도
sudo nft list ruleset모든 테이블·체인·규칙
sudo nft list tables테이블 목록(inet firewalld 등)
sudo nft -a list chain inet filter input규칙 handle 번호 포함
sudo iptables -S / sudo iptables-saveiptables 형식으로 보기
sudo nft monitor규칙 변경 실시간 관찰

4. 실습 (실습 예시)

# 1) 어떤 테이블이 있는가: firewalld가 만든 것 vs 그 외
sudo nft list tables
# table inet firewalld   ← firewalld 소유
# table inet filter      ← 직접 만든 테이블(있다면 출처 확인 필요)

# 2) 학습용 테이블에 로깅 규칙 예시 (테스트 VM에서만)
sudo nft add table inet lab
sudo nft add chain inet lab input '{ type filter hook input priority 10; policy accept; }'
sudo nft add rule inet lab input tcp dport 23 log prefix '"LAB-TELNET-DROP "' drop

# 3) 확인 및 정리
sudo nft -a list table inet lab
sudo nft delete table inet lab

log prefix를 붙이면 커널 로그에서 어느 규칙에 걸렸는지 바로 식별할 수 있습니다.

5. 정상 상태

$ sudo nft list tables
table inet firewalld
$ sudo nft list chain inet firewalld filter_INPUT | head -5
table inet firewalld {
	chain filter_INPUT {
		type filter hook input priority filter + 10; policy accept;
		ct state { established, related } accept
		...

firewalld 환경에서는 inet firewalld 테이블만 존재하고, 규칙이 firewalld 설정과 일치하는 상태가 정상입니다.

6. 이상 상태

$ sudo nft list tables
table inet firewalld
table ip nat_helper
$ sudo nft list table ip nat_helper
table ip nat_helper {
	chain input {
		type filter hook input priority -200; policy accept;
		ip saddr 203.0.113.45 accept
	}
}
  • firewalld와 무관한 테이블이 더 높은 우선순위(-200) 로 특정 외부 IP를 먼저 허용
  • 이름(nat_helper)은 정상 구성처럼 보이지만 내용은 백도어용 허용 규칙 패턴입니다. firewall-cmd --list-all에는 나타나지 않습니다.

7. 로그 분석 (분석 방법)

nftables 규칙 변경은 auditd NETFILTER_CFG 이벤트로 기록됩니다(가상의 예시 로그).

type=NETFILTER_CFG msg=audit(1759718400.551:1501): table=nat_helper:3 family=2 entries=1 op=nft_register_chain pid=7410 subj=unconfined_u:unconfined_r:unconfined_t:s0 comm="nft"
type=SYSCALL msg=audit(1759718400.551:1501): arch=c000003e syscall=46 success=yes ppid=7380 pid=7410 auid=1002 uid=0 comm="nft" exe="/usr/sbin/nft"
Oct  1 09:41:07 rocky9-web01 kernel: LAB-TELNET-DROP IN=ens160 OUT= SRC=192.168.56.77 DST=192.168.56.10 PROTO=TCP SPT=40122 DPT=23 SYN
필드의미
NETFILTER_CFG방화벽 규칙/체인/테이블 변경
op=nft_register_chain체인 생성 (rule이면 nft_register_rule)
comm="nft", auid=1002직접 nft 명령 실행, 로그인 사용자 1002

firewalld가 변경하면 comm="firewalld"로 남으므로 firewalld 외 프로세스의 NETFILTER_CFG가 핵심 탐지 포인트입니다.

8. SOC 관제 포인트

  • NETFILTER_CFG 중 comm이 firewalld/ufw가 아닌 이벤트를 우선 확인합니다.
  • nft list tables 결과를 기준선에 포함합니다.
  • 차단 로그 prefix 규칙을 표준화해 SIEM에서 규칙별 집계가 가능하게 합니다.

9. 탐지 규칙

<rule id="100230" level="10">
  <if_group>audit</if_group>
  <match>type=NETFILTER_CFG</match>
  <regex>comm="nft"|comm="iptables|comm="ip6tables</regex>
  <description>firewalld 외 도구에 의한 방화벽 규칙 변경</description>
</rule>

Wazuh audit 디코더가 해당 이벤트를 파싱하는지 wazuh-logtest로 먼저 확인하고, 필요하면 <match> 대신 <field name="audit.type">NETFILTER_CFG</field>로 조정합니다.

10. 대응 방법

  1. 초기 확인 — nft list ruleset 전체를 저장하고 firewalld 외 테이블·체인을 식별합니다.
  2. 범위 확인 — 허용된 외부 IP의 실제 접속 이력을 연결·인증 로그에서 확인합니다.
  3. 증거 확보 — 규칙셋 출력, NETFILTER_CFG audit 로그, 실행 세션 기록을 보존합니다.
  4. 차단/조치 — 비인가 테이블을 삭제하고(nft delete table) 해당 IP를 차단합니다.
  5. 재발 방지 — 규칙셋 기준선과 NETFILTER_CFG 탐지 룰을 운영합니다.

11. 핵심 정리

구분핵심 내용
구조도구(firewalld/iptables/nft) → netfilter(커널)
Rocky 9 / Ubuntu 22.04firewalld→nftables / iptables-nft
점검 핵심nft list ruleset로 firewalld 밖의 규칙 확인
변경 로그auditd NETFILTER_CFG (comm 필드)
면접 포인트"firewall-cmd에 안 보이는 규칙이 존재할 수 있다"

12. 다음 편 예고

다음 편 017. Linux 서버 보안 — SELinux 상태 점검과 AVC 거부 분석 에서는 강제 접근 통제 계층인 SELinux 상태 점검과 AVC 거부 로그 분석을 다룹니다.


이전 편: 015. Linux 서버 보안 — firewalld zone 설계와 점검
📚 시리즈 전체 보기: 시스템 보안 · 취약점

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글