CB정보통신 인프라 보안 구축 — 7개 파트 구축 · 통합 검증 완료 ✓

PART 06 // LOG · ELK

모든 기록을
한곳에, 두 벌로

방화벽 · 스위치 · 서버의 로그를 rsyslog 로 한 서버에 모으고, 디스크 두 장을 RAID-1 로 묶어 저장했습니다. ELK 로 검색하고 대시보드로 봅니다.

한 장이 죽어도
로그는 남는다

192.168.30.30CB-LOG
RAID-15GB × 2 → /DEV/MD0
:514UDP · TCP RSYSLOG
KIBANAADMIN PC ONLY

// WHAT WE BUILT

LOG / ELK에서 만든 것

RAID-1

디스크 두 장, 같은 기록

5GB 디스크 두 장을 mdadm 으로 미러링해 /var/log/backuplog 에 마운트했습니다. 한 장이 빠져도 기록이 이어집니다.

RSYSLOG

장비별 폴더로 수신

UDP · TCP 514 로 받아 /var/log/backuplog/호스트/프로그램.log 에 나눠 저장합니다.

ELK

찾고, 보고

Logstash 가 syslog 를 grok 으로 나눠 Elasticsearch 에 날짜별 인덱스로 넣고, Kibana 로 봅니다. Kibana 는 담당자 PC 만 접속.

// CONFIGURATION

실제로 넣은 설정

장비에 입력한 순서 그대로입니다. 계정 비밀번호는 공개 사이트라 가렸습니다.

STEP 01

RAID-1

sdb · sdc 에 RAID 파티션을 만들고 md0 으로 묶습니다.

mdadm
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
sudo mkfs.ext4 /dev/md0
sudo mkdir -p /var/log/backuplog
sudo mount /dev/md0 /var/log/backuplog
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

STEP 02

중앙 수신

원격 로그는 호스트 · 프로그램별 파일로.

/etc/rsyslog.d/00-central-server.conf
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")
$template RemoteLogs,"/var/log/backuplog/%HOSTNAME%/%PROGRAMNAME%.log"
if ($fromhost-ip != '127.0.0.1') then {
    action(type="omfile" dynaFile="RemoteLogs")
    stop
}

STEP 03

Logstash 파이프라인

날짜별 인덱스 cb-syslog-*.

/etc/logstash/conf.d/syslog.conf
input  { udp { port => 5514 type => "syslog" } tcp { port => 5514 type => "syslog" } }
filter { grok { match => { "message" => "%{SYSLOGTIMESTAMP:ts} %{SYSLOGHOST:host} %{DATA:program}: %{GREEDYDATA:msg}" } } }
output { elasticsearch { hosts => ["http://127.0.0.1:9200"] index => "cb-syslog-%{+YYYY.MM.dd}" } }

STEP 04

Kibana 접근 제한

담당자 PC 만 5601 에 닿게 합니다.

iptables
sudo iptables -A INPUT -p tcp --dport 5601 -s 192.168.10.50 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 5601 -j DROP

// VERIFICATION

검증 완료

cat /proc/mdstat
cb-log$ cat /proc/mdstat
md0 : active raid1 sdc1[1] sdb1[0]
      5237760 blocks super 1.2 [2/2] [UU]

cb-log$ ls /var/log/backuplog
cb-web  cb-db  CB-L3-SW  CB-L2-SW1  CB-L2-SW2  trusguard

cb-log$ curl -s localhost:9200/_cluster/health | jq .status
"green"
  • RAID-1 두 장 모두 정상[UU]
  • 장비별 로그 폴더 생성web · db · 스위치 · 방화벽
  • Elasticsearch 정상cluster health
  • Kibana 에 cb-syslog-* 표시담당자 PC 에서만 접속

// PITFALLS

겪었던 문제와 해결

증상원인해결
Elasticsearch 시작 실패vm.max_map_count 부족sysctl -w vm.max_map_count=262144
재부팅 후 마운트 안 됨fstab 미등록UUID 로 fstab 등록 · nofail