Splunk 설치 이후 Source Type 지정
Splunk를 우분투에 올리는 과정 자체는 별게 없다. wget으로 .deb 파일 받고, dpkg로 설치하고, sudo /opt/splunk/bin/splunk start 한 줄이면 끝난다. 무료 라이선스로 바꾸는 것도 웹 UI에서 Settings → Licensing 들어가서 Free license 선택하면 그만이고. 하루 500MB 제한이 있긴 한데 학습 환경에서는 충분히 쓸 만하다.
신경써야 하는 부분은 따로 있다. 바로 Data input을 추가할 때 설정하는 Source Type이다. 책에서도 이걸 강조하는데, Source Type은 "지금 들어오는 로그가 어떤 포맷인지" Splunk한테 알려주는 메타데이터다. syslog로 들어오는 데이터라면 Source Type을 syslog로 지정해야 Splunk가 파싱을 제대로 한다. 그냥 대충 넘기면 나중에 검색할 때 필드 분류가 엉망이 된다. pfSense에서 날아오는 방화벽 로그를 위해 'pfSense'라는 전용 인덱스를 따로 만든 것도 같은 맥락이다. 데이터 종류에 따라 인덱스를 잘 구분해 놓지 않으면 검색 속도에 영향이 생기기 때문이다.
pfSense에서 스플렁크 서버로 로그를 보내는 설정도 간단하다. pfSense 메뉴에서 Status → System Logs → Settings로 가면 Remote Logging Options가 있고, Enable Remote Logging을 체크한 뒤 스플렁크 서버 IP와 514번 포트를 입력하면 된다. Remote Syslog Contents를 Everything으로 설정해두면 방화벽 로그뿐 아니라 VPN 로그도 한꺼번에 딸려온다.
방화벽 로그를 읽으려면 룰 ID부터 파악해야 한다
Splunk로 로그가 들어오기 시작했을 때, 처음엔 그냥 텍스트 덩어리처럼 보인다. pfSense 방화벽 로그는 filterlog: 이후의 내용을 콤마로 구분해서 읽는 구조인데, 4번째 숫자가 룰 ID다. 예를 들면 이런 식이다.
127,16777216,,1504763065,em0_vlan20,match,pass,in,4,0x0,,64,10840,0,DF,6,tcp,60,10.20.1.5,172.217.25.238,48948,443,0,S,2371018296,,29200,,mss;sackOK;TS;nop;wscale
여기서 '1504763065'가 룰 ID고, 뒤에 나오는 em0_vlan20은 로그가 발생한 인터페이스, match/pass는 패킷이 허용됐다는 뜻이다. 차단된 로그라면 pass 자리에 block이 표시된다. 그다음으로 보이는 건 프로토콜, 소스 IP, 데스티네이션 IP, 포트 번호 순서로 이어진다. 443이 데스티네이션 포트니까 이게 HTTPS 트래픽이라는 것도 바로 읽힌다.
사실 이 룰 ID만 알면 어떤 ACL 룰에 의해 걸린 건지 추적이 가능하다. pfSense 터미널에서 pfctl -vvsr > fw_name.txt로 룰 목록을 덤프해서 ID와 Description을 대조하면 된다. 책에서는 VLAN마다 Block Inbound / Block Outbound 룰 ID를 정리한 표도 보여주는데, 이걸 먼저 뽑아두면 스플렁크에서 로그를 볼 때 훨씬 빠르게 의미를 파악할 수 있다.
VPN 로그와 IPS 로그까지 연결하면 사용자 행위 추적이 된다
VPN 로그와 방화벽 로그를 교차해서 볼 수도 있다. 스플렁크에서 index=pfsense sourcetype=syslog openvpn authenticated로 검색하면 VPN에 로그인한 사용자와 할당받은 IP를 확인할 수 있다. 그다음 fw_name.txt에서 해당 VPN 룰 ID를 찾아 스플렁크에 다시 던지면, VPN 인증 이후에 그 사용자가 어디로 트래픽을 보냈는지가 보인다.
책에 나온 예시를 보면 'window31vpn'이라는 사용자가 VPN 인증 후 10.50.1.2를 할당받았고, 9분 뒤에 10.10.1.2로 SSH 접속을 시도했다는 걸 두 로그를 조합해서 알아낼 수 있었다. 거기에 외부 접속 로그까지 합쳐서 보면 해당 사용자가 VPN 연결 상태에서 구글이나 안랩 같은 외부 사이트를 방문했다는 것도 리버스 DNS 조회로 확인 가능하다. 스플렁크 쿼리 하나에서 시작해서 사용자 행위 타임라인을 그릴 수 있게 되는 셈이다.
IPS 쪽은 스노트가 Barnyard2를 통해 syslog로 경보를 포워딩하는 구조다. Barnyard2는 unified2 포맷의 패킷 캡처 파일을 DB에 저장하고 syslog로도 내보내는 역할을 한다. 활성화하면 /var/log/snort/INTERFACE_NAME/alert 경로에 로그가 쌓이고, 이게 스플렁크로 넘어온다. SQL Injection 샘플 패킷을 던졌을 때 index=pfsense sourcetype=syslog snort Classification으로 바로 잡히는 걸 확인할 수 있다. 스쿼드가드 웹 필터 차단 로그는 syslog가 기본 지원이 안 되기 때문에 pfSense에 syslog-ng 패키지를 따로 설치해서 /var/squidGuard/log/block.log를 스플렁크로 포워딩하는 우회 경로를 만들어야 한다.
'study' 카테고리의 다른 글
| [도서] 인프라보안 - 15장: Windows 이벤트 로그와 Linux 로그 분석 (0) | 2026.01.28 |
|---|---|
| [도서] 인프라보안 - 14장: ESM 구축과 보안 로그 중앙화 (0) | 2026.01.20 |
| [컨퍼런스] 토스 가디언즈 - 동의서 정복하기 (0) | 2026.01.05 |
| [도서] 인프라보안 - 12장: 룰 관리와 제로데이 익스플로잇 대응 (0) | 2026.01.05 |
| [도서] 인프라보안 - 11장: IDS 튜닝과 주요 명령어 (0) | 2025.12.24 |