μ°μ μ μ΄μμ€ν (OT) νκ²½μ μ€μκ° μν νμ§ λ° λͺ¨λν°λ§μ μν ν΅ν© 보μ μμ€ν μ λλ€.
- β μ€μκ° ν¨ν· λΆμ - C++ κΈ°λ° κ³ μ±λ₯ Parser
- β SLM νμ΅ λ°μ΄ν° μμ± - CSV νμ νΉμ§ μΆμΆ
- β λ©λͺ¨λ¦¬ κΈ°λ° μ€νΈλ¦¬λ° - Redis Stream + Kafka
- β Elasticsearch μ°λ - λμ보λ λ°μ΄ν° μ μ₯
- β Docker κΈ°λ° λ°°ν¬ - 컨ν μ΄λ μ€μΌμ€νΈλ μ΄μ
μμ€ν μ 2κ°μ λ 립μ μΈ λ¨κ³λ‘ μ€νλ©λλ€:
# Parser λΉλ
cd Parser
sudo rm -rf output
rm -rf build
cmake -B build
cmake --build build
# νμ΅ λ°μ΄ν° μμ±
cd ..
chmod +x run-training.sh
./run-training.shβ CSV λ°μ΄ν° μμ± β λͺ¨λΈ νμ΅
# RealtimeParser λΉλ
cd RealtimeParser
sudo rm -rf output
rm -rf build
cmake -B build
cmake --build build
# νκ²½ μ€μ
cd ../operation
cp .env.example .env
nano .env # ELASTICSEARCH_HOST μμ
# μ΄μ μμ€ν
μμ
chmod +x run-production.sh
./run-production.shβ μ€μκ° νμ§ β Elasticsearch β Dashboard
π μμΈ κ°μ΄λ: EXECUTION-GUIDE.md
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β OT Security System β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββββββ ββββββββββββββββββββ β
β β RealtimeParser βββββββββΆβ JSONL Files β β
β β (μ€μκ° νμ§) β β (곡μ λ³Όλ₯¨) β β
β ββββββββββ¬ββββββββββ ββββββββββ¬ββββββββββ β
β β β β
β ββββ Redis Stream ββββ Python Sender β
β ββββ Kafka Topics β λλ Filebeat β
β β β β
β ββββββββββββββββββ ββββββββββββββββββ β
β β Parser β β Elasticsearch β β
β β (SLM νμ΅μ©) βββββββββββΆβ (Dashboard PC) β β
β β CSV μΆλ ₯ β ββββββββββββββββββ β
β ββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
OT-Security-Monitoring/
β
βββ README.md # μ΄ λ¬Έμ
β
βββ operation/ # π³ Docker μ΄μ
β βββ docker-compose.yml
β βββ docker-compose-with-parser.sh
β βββ test-elasticsearch-integration.sh
β βββ .env.example
β
βββ RealtimeParser/ # π§ μ€μκ° Parser
β βββ build/parser # μ€ν λ°μ΄λ리
β βββ Dockerfile
β βββ config.json
β βββ README.md
β
βββ Parser/ # π SLM νμ΅μ© Parser
β βββ build/parser # μ€ν λ°μ΄λ리
β βββ Dockerfile
β βββ config.json (CSV μΆλ ₯)
β βββ README.md
β
βββ python-jsonl-sender/ # π Python Sender
β βββ sender.py
β βββ Dockerfile
β βββ README.md
β
βββ filebeat/ # π‘ Filebeat (λμ)
β βββ filebeat.yml
β
βββ docs/ # π λ¬Έμ
βββ QUICK-START.md
βββ README.md
π μμΈ κ΅¬μ‘°: DIRECTORY-STRUCTURE.md
- μμΉ:
RealtimeParser/ - μν : μ€μκ° ν¨ν· μΊ‘μ² λ° μ μ²λ¦¬
- μΆλ ₯: Redis Stream, Kafka Topics, JSONL Files
- λΉλ:
cd RealtimeParser/build && cmake .. && make
- μμΉ:
Parser/ - μν : SLM νμ΅ λ°μ΄ν° μμ±
- μΆλ ₯: CSV Files (ν΅κ³ νΉμ§ μΆμΆ)
- λΉλ:
cd Parser/build && cmake .. && make
- μμΉ:
python-jsonl-sender/ - μν : JSONL β Elasticsearch μ μ‘
- νΉμ§: Watchdog κΈ°λ° μ€μκ° κ°μ
- μμΉ:
operation/ - μλΉμ€: Redis, Kafka, Parser, Sender
- λͺ¨λν°λ§: Kafka UI (8090), Redis Commander (8081)
Network Packets
β
RealtimeParser
ββββ Redis Stream (μ€μκ°)
ββββ Kafka Topics (μ΄λ²€νΈ)
ββββ JSONL Files
β
Python Sender
β
Elasticsearch
Network Packets / PCAP Files
β
Parser (νμ΅μ©)
β
CSV Files (νΉμ§ μΆμΆ)
β
SLM Training
| μ»΄ν¬λνΈ | κΈ°μ |
|---|---|
| Realtime Parser | C++, libpcap, hiredis, librdkafka |
| Training Parser | C++, libpcap, CSV μΆλ ₯ |
| Streaming | Redis Stream, Apache Kafka |
| Data Transfer | Python, Watchdog, Elasticsearch Client |
| Storage | Elasticsearch (Dashboard PC) |
| Orchestration | Docker, Docker Compose |
- λΉ λ₯Έ μμ (5λΆ) - μ΅μ μ€μ μΌλ‘ λΉ λ₯΄κ² μμ
- Docker μ΄μ κ°μ΄λ - operation λλ ν 리 μ¬μ©λ²
- RealtimeParser κ°μ΄λ - μ€μκ° Parser
- Parser κ°μ΄λ - SLM νμ΅μ© Parser
- C++ λΉλ κ°μ΄λ - CMake λΉλ
- Elasticsearch μ°λ - μλ²½ κ°μ΄λ
- Docker μμΈ - Docker Compose μ€μ
- λλ ν 리 ꡬ쑰 - μ 체 νλ‘μ νΈ κ΅¬μ‘°
- μν€ν μ² - μμ€ν μ€κ³
- CMake 3.15+
- GCC 9.0+ λλ Clang 10.0+
- libpcap-dev, hiredis-dev, librdkafka-dev
- Docker 20.10+
- Docker Compose 1.29+
- Elasticsearch 8.x
- μ΅μ 2GB RAM
cd operation
# μλΉμ€ μν
docker-compose ps
# λ‘κ·Έ νμΈ
docker-compose logs -f cpp-parser jsonl-sender
# Elasticsearch λ°μ΄ν°
curl http://192.168.1.100:9200/ot-security-packets-*/_search?pretty- Kafka UI: http://localhost:8090
- Redis Commander: http://localhost:8081
cd operation
chmod +x test-elasticsearch-integration.sh
./test-elasticsearch-integration.sh# RealtimeParser λ°μ΄λ리 νμΈ
ls -lh RealtimeParser/build/parser
# Parser λ°μ΄λ리 νμΈ
ls -lh Parser/build/parser
# μμΌλ©΄ λΉλ
cd RealtimeParser/build && cmake .. && make
cd ../../Parser/build && cmake .. && make# .env νμΈ
cat operation/.env
# Elasticsearch ν
μ€νΈ
curl http://192.168.1.100:9200// RealtimeParser/config.json
{
"parser": {
"batch_size": 500,
"flush_interval_ms": 500
}
}// Parser/config.json
{
"parser": {
"batch_size": 100
},
"output": {
"csv": {
"rotation_size_mb": 100
}
}
}- λ€νΈμν¬ κ²©λ¦¬
- μ½κΈ° μ μ© λ³Όλ₯¨
- Elasticsearch μΈμ¦
- 리μμ€ μ ν
# 1. μ μ₯μ ν΄λ‘
git clone <repository-url>
cd OT-Security-Monitoring
# 2. Parser λΉλ
cd RealtimeParser/build && cmake .. && make
cd ../../Parser/build && cmake .. && make
# 3. νκ²½ μ€μ
cd ../../operation
cp .env.example .env
nano .env
# 4. μμ€ν
μμ
./docker-compose-with-parser.sh
# 5. ν
μ€νΈ
./test-elasticsearch-integration.shπ μλ£! μμ€ν μ΄ μ€νλκ³ μμ΅λλ€!
λ μμΈν λ΄μ©μ docs/QUICK-START.mdλ₯Ό μ°Έκ³ νμΈμ.