본문 바로가기
네트워크 (LAN,WAN)

실시간 IP 위치 추적과 경고까지, GeoIP 분석 자동화 파이프라인 구축

by 날으는물고기 2025. 7. 22.

실시간 IP 위치 추적과 경고까지, GeoIP 분석 자동화 파이프라인 구축

728x90

MaxMind의 GeoIP 기술은 IP 주소를 기반으로 지리적 위치(국가, 도시, ISP 등)를 파악할 수 있도록 지원합니다. 이를 사용하는 주요 방법은 다음과 같이 세 가지로 나뉩니다. 데이터베이스 기반, 웹 서비스 API, 클라이언트 측 JavaScript입니다. 또한, 데이터베이스를 최신 상태로 유지하기 위한 업데이트 절차도 중요합니다.

1. 데이터베이스 기반 GeoIP 사용 방법 (GeoIP2 / GeoLite2)

MaxMind에서는 다운로드 가능한 GeoIP2 (유료)와 GeoLite2 (무료) 데이터베이스를 제공합니다. 이 데이터베이스를 로컬에 저장하고 직접 조회하는 방식입니다.

주요 데이터베이스 종류

  • GeoLite2-Country.mmdb
  • GeoLite2-City.mmdb
  • GeoLite2-ASN.mmdb

설치 및 사용 (Python 예시)

pip install geoip2
import geoip2.database

reader = geoip2.database.Reader('/path/to/GeoLite2-City.mmdb')
response = reader.city('8.8.8.8')

print("Country:", response.country.name)
print("City:", response.city.name)
print("Latitude:", response.location.latitude)
print("Longitude:", response.location.longitude)

reader.close()
  • DB 파일은 주기적으로 업데이트해야 정확도를 유지함.
  • 외부 접근 없이 내부 로컬에서 IP 조회 가능 (API 제한 우회, 보안성 높음).
  • 서버에서 실시간 조회 시 속도 빠름, 개인정보 보호 측면에서 유리.

웹 서비스 기반 GeoIP 사용 (MaxMind API)

MaxMind는 RESTful API 형식으로 IP 위치 정보를 제공합니다. 유료 플랜 또는 제한된 무료 트라이얼로 사용 가능합니다.

기본 요청 예시 (GeoIP2 Precision Web Services)

curl -u YOUR_ACCOUNT_ID:YOUR_LICENSE_KEY \
"https://geoip.maxmind.com/geoip/v2.1/city/8.8.8.8"

응답 예시

{
  "city": { "names": { "en": "Mountain View" } },
  "country": { "iso_code": "US", "names": { "en": "United States" } },
  "location": {
    "latitude": 37.386,
    "longitude": -122.0838
  }
}
  • HTTPS 기반 API 호출로 데이터 암호화.
  • API Key/License Key 유출 방지 필수.
  • 요청 횟수 제한 및 요금제 확인 필요.
  • 서버 외부 통신 필요 → 내부망 서버에서는 제한될 수 있음.

3. 클라이언트 측 JavaScript 기반 사용

MaxMind에서는 JS 라이브러리를 통해 클라이언트 측에서 IP 정보를 가져올 수 있는 기능도 제공합니다.

사용 방법

<script src="https://js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js"></script>
<script>
  geoip2.city(
    function(response) {
      console.log("City:", response.city.names.en);
      console.log("Country:", response.country.names.en);
    },
    function(error) {
      console.log("Error:", error);
    }
  );
</script>
  • 브라우저 측에서 실행되므로 개인정보 노출에 유의.
  • 기업 서비스에서는 서버 측 확인 방식 권장.
  • JS 라이브러리도 MaxMind의 라이선스 정책 적용됨.

4. 데이터베이스 업데이트 및 유지관리 방법

자동 업데이트 (CLI 도구 사용)

MaxMind는 geoipupdate라는 CLI 도구를 제공하여 자동으로 데이터베이스를 갱신할 수 있습니다.

300x250

📦 설치

sudo apt install geoipupdate        # Debian/Ubuntu
sudo yum install geoipupdate        # CentOS/RHEL

⚙️ 설정파일: /etc/GeoIP.conf

AccountID YOUR_ACCOUNT_ID
LicenseKey YOUR_LICENSE_KEY
EditionIDs GeoLite2-City GeoLite2-Country GeoLite2-ASN

🔁 수동 또는 주기적 실행

sudo geoipupdate

자동 업데이트 (cron 등록 예시)

0 3 * * 0 /usr/bin/geoipupdate > /var/log/geoipupdate.log 2>&1
  • 설정 파일 권한을 600으로 제한하여 LicenseKey 보호: chmod 600 /etc/GeoIP.conf
  • 업데이트 주기는 주 1회 또는 월 2회 추천.
  • 실패 로그 자동 확인 및 Slack/메일 연동하면 좋음.

활용 사례

환경 적용 방식 설명
웹서버 로그 분석 DB 기반 IP별 방문 위치 분석 및 대시보드 시각화
API Gateway Web Service API 요청자 위치에 따라 리전 분기 처리
사용자 맞춤형 서비스 JavaScript 위치 기반 콘텐츠 추천
보안 로그 분석 DB 기반 해외 IP 또는 의심 국가 탐지 자동화

점검 포인트

  • DB 업데이트 자동화 여부 확인 (geoipupdate)
  • LicenseKey 노출 여부 확인 (GeoIP.conf 권한 설정)
  • 외부 API 사용 시 암호화된 HTTPS 요청 사용 여부
  • IP 기반 차단 정책에 실제 위경도 기반 필터링 적용 여부
  • JS 라이브러리 사용 시 CORS 정책 및 사용자 개인정보 보호 방침 마련

 

Wazuh와 n8n을 연계하여 GeoIP 기반의 자동 분석 및 경고 시스템을 구성하면, 보안 이벤트 발생 시 해당 IP의 지리적 위치를 기반으로 자동 분류, 알림 전송, 차단 등의 액션을 수행할 수 있습니다. 이 방식은 특히 해외 IP 접속 시 경고, 의심 국가 탐지, 정책 기반 대응 자동화에 유용합니다. 아래는 전체 구성 흐름과 각각의 요소별 설정 방법입니다.

graph TD
    Wazuh[Wazuh Manager (로그 수집)] --> Rule[Custom Rule (IP 포함 이벤트)]
    Rule --> N8N_Webhook[n8n Webhook 호출]
    N8N_Webhook --> GeoIP_Lookup[IP GeoIP API 또는 DB 분석]
    GeoIP_Lookup --> FilterCheck[국가 코드 필터링]
    FilterCheck -->|허용 국가| SlackOK[Slack 정상 보고]
    FilterCheck -->|차단 국가| SlackWarn[Slack 경고 전송]
    FilterCheck -->|차단 국가| BlockIP[Firewall 차단(Optional)]

Wazuh 측 설정 (규칙 생성 + Active Response)

사용자 정의 룰 설정 (예: /var/ossec/etc/rules/local_rules.xml)

<group name="geoip-test,">
  <rule id="100150" level="7">
    <decoded_as>json</decoded_as>
    <field name="srcip">\d+\.\d+\.\d+\.\d+</field>
    <description>이벤트에 외부 IP 포함됨 - GeoIP 분석 필요</description>
    <options>no_full_log</options>
  </rule>
</group>

Active Response 스크립트 설정 (Webhook 호출)

📁 /var/ossec/active-response/bin/geoip_to_n8n.sh

#!/bin/bash
SRCIP=$1
curl -X POST "https://your-n8n-server/webhook/geoip_alert" \
     -H "Content-Type: application/json" \
     -d "{\"ip\":\"$SRCIP\"}"

🛡️ /var/ossec/etc/ossec.conf에 등록

<active-response>
  <command>geoip_to_n8n.sh</command>
  <location>all</location>
  <rules_id>100150</rules_id>
</active-response>

n8n 워크플로 구성

Webhook 노드 (POST /webhook/geoip_alert)

  • Method: POST
  • Authentication: optional
  • Response: 200 OK로 설정

Function 노드 (IP 추출)

return [
  {
    json: {
      ip: $json.ip || $json.body.ip
    }
  }
];

HTTP Request 노드 (GeoIP 조회)

  • URL 예시 (무료): http://ip-api.com/json/{{ $json.ip }}
  • 또는 자체 구축한 MaxMind DB 조회 API 사용 가능
  • Method: GET
  • Response Format: JSON

필터 노드 (예: 한국, 미국만 허용)

const allowedCountries = ['KR', 'US'];
return allowedCountries.includes($json.countryCode)
  ? [{ json: { ...$json, status: 'ok' } }]
  : [{ json: { ...$json, status: 'blocked' } }];

Slack 노드 (경고 또는 보고)

  • status == "blocked"인 경우 경고 메세지 전송
  • 예시 메세지
    🚨 외부 접속 경고
    IP: {{ip}}
    국가: {{country}} ({{countryCode}})

방화벽 자동 차단 연동

예: ufw 차단

sudo ufw deny from 203.0.113.25

n8n에서 HTTP Request 노드로 내부 API 서버 또는 SSH 연동 통해 실행 가능

(보안상 제약 있는 환경에서는 승인 후 연동 권장)

항목 체크리스트
GeoIP API 상용 API 사용 시 쿼터/속도 확인 필요
n8n Webhook 인증 설정 권장 (Basic Auth, JWT 등)
내부망 Wazuh 외부로 나가지 않게 프록시 구성 또는 자체 GeoIP API 추천
IP 차단 자동 차단 대신 경고 기반 운영도 가능
로그 추적 GeoIP 결과 및 알림 이력 저장 권장 (Google Sheets, DB 등)

확장 아이디어

  • GeoIP 결과 Google Sheets 저장 → IP별 국가 추이, 이상 접속 분석
  • Wazuh + n8n + VirusTotal → 의심 IP의 악성 여부 동시 확인
  • 특정 국가 접속 시 자동 티켓 생성 → TheHive 연계 가능
728x90
그리드형(광고전용)

댓글