여기까지 잘 따라하셨다면 아래와 같은 화면을 보실 수 있을 것입니다.

왼쪽을 보면 로그 파싱된 필드들이 엄청나게 보입니다.

t로 보이는 것은 text

#으로 보이는 것은 숫자 입니다.

'기술 노트 > kibana' 카테고리의 다른 글

map에서 ip로 지역 표시하기  (0) 2023.08.23
kibana 설정  (0) 2023.02.17
kibana 설치  (0) 2023.02.16

fortigate log 파싱 부분이 추가되었습니다.

fortigate 로그 파싱할때에는 logstash-filter-bytes를 사용하였습니다.

이유는 logstash에서 로그를 파싱하면 모든 자료는 기본적으로 type이 text입니다.

마찬가지로 숫자도 text로 인식합니다.

그래서 데이터 전송량도 type에 맞게 bytes라는 필터를 추가로 설치하였습니다.

logstash-filter-bytes의 설치는 아래의 작성 글을 참고하시기 바랍니다.

https://dirt-spoon.tistory.com/80

 

input {
        file {
                path => "/var/log/rsyslog/192.168.10.2/*.log"
                start_position => "beginning"
                tags => ["ap1"]
        }
        file {
                path => "/var/log/rsyslog/192.168.10.3/*.log"
                start_position => "beginning"
                tags => ["ap2"]
        }
        file {
                path => "/var/log/rsyslog/192.168.10.4/*.log"
                start_position => "beginning"
                tags => ["ap3"]
        }
        file {
                path => "/var/log/rsyslog/192.168.10.5/*.log"
                start_position => "beginning"
                tags => ["ap4"]
        }
        file {
                path => "/var/log/rsyslog/192.168.0.14/*.log"
                start_position => "beginning"
                tags => ["fortigate"]
        }
}

filter {
        if "ap1" in [tags] or "ap2" in [tags] or "ap3" in [tags] or "ap4" in [tags]  {
                grok {
                        patterns_dir => ["/etc/logstash/pattern.d"]
                        match => {
                                "message" => [
                                        "%{SYSLOGTIMESTAMP:access_time} %{IPORHOST:ip_or_host} %{IPORHOST:process}\[%{BASE10NUM:process_id}\]\: %{GREEDYDATA:sub_message}",
                                        "%{SYSLOGTIMESTAMP:access_time} %{IPORHOST:ip_or_host} \[%{BASE10NUM:process_id}\]\: %{GREEDYDATA:sub_message}",
                                        "%{SYSLOGTIMESTAMP:access_time} %{IPORHOST:ip_or_host} %{WORD:process}\: User\: %{GREEDYDATA:user} last logged %{GREEDYDATA:access_result} in %{GREEDYDATA:access_day}\#%{NUMBER:deauthentication_reason_code}, to %{IP:destination_ip}, from %{IP:source_ip} using %{WORD:access_method}",
                                        "%{SYSLOGTIMESTAMP:access_time} %{IPORHOST:ip_or_host} %{WORD:process}\: User\: %{GREEDYDATA:reason} in %{GREEDYDATA:access_day}\#%{NUMBER:deauthentication_reason_code}, to %{IP:destination_ip}, from %{IP:source_ip} using %{WORD:access_method}"
                                ]
                        }
                }
                mutate { remove_field => [ "message" ] }
        }
        else if "fortigate" in [tags] {
                grok {
                        patterns_dir => ["/etc/logstash/pattern.d"]
                        match => { "message" => [ "%{FORTILOG} %{GREEDYDATA:sub_message}" ] }
                }
                kv {
                        source => "sub_message"
                        value_split => "="
                }
                mutate { remove_field => [ "message" ] }
                mutate { remove_field => [ "sub_message" ] }
                if "wan" in [srcintfrole] {
                        geoip {
                                source => "srcip"
                                target => "geoip_src"
                        }
                }
                if [sentbyte] != "" and [rcvdbyte] != "" {
                        bytes {
                                source => "rcvdbyte"
                                target => "receivedbyte"
                        }
                        bytes {
                                source => "sentbyte"
                                target => "sentedbyte"
                        }
                }
                mutate {
                        convert => {
                                "rcvdpkt" => "integer"
                                "sentpkt" => "integer"
                                "proto" => "integer"
                                "srcserver" => "integer"
                                "sessionid" => "integer"
                                "duration" => "integer"
                                "policyid" => "integer"
                                "HOUR" => "integer"
                                "MINUTE" => "integer"
                                "SECOND" => "integer"
                        }
                }
        }
}

output {
        if "ap1" in [tags] {
                elasticsearch {
                        hosts => "http://192.168.0.17:9200"
                        index => "logstash-ap1-index-%{+YYYY.MM.dd}"
                }
        }
        else if "ap2" in [tags] {
                elasticsearch {
                        hosts => "http://192.168.0.17:9200"
                        index => "logstash-ap2-index-%{+YYYY.MM.dd}"
                }
        }
        else if "ap3" in [tags] {
                elasticsearch {
                        hosts => "http://192.168.0.17:9200"
                        index => "logstash-ap3-index-%{+YYYY.MM.dd}"
                }
        }
        else if "ap4" in [tags] {
                elasticsearch {
                        hosts => "http://192.168.0.17:9200"
                        index => "logstash-ap4-index-%{+YYYY.MM.dd}"
                }
        }
        else if "fortigate" in [tags] {
                if "traffic" in [LOG_TYPE] {
                        elasticsearch {
                                hosts => "http://192.168.0.17:9200"
                                index => "logstash-fortigate-traffic-index-%{+YYYY.MM.dd}"
                        }
                }
                else if "event" in [LOG_TYPE] {
                        elasticsearch {
                                hosts => "http://192.168.0.17:9200"
                                index => "logstash-fortigate-event-index-%{+YYYY.MM.dd}"
                        }
                }
                else if "utm" in [LOG_TYPE] {
                        elasticsearch {
                                hosts => "http://192.168.0.17:9200"
                                index => "logstash-fortigate-utm-index-%{+YYYY.MM.dd}"
                        }
                }
        }
}

'기술 노트 > logstash' 카테고리의 다른 글

logstash.conf_230306  (0) 2023.03.06
logstash.conf_23.02.20  (0) 2023.02.20
logstash 파일 파싱하기  (0) 2023.02.20
logstash 설정  (0) 2023.02.20
grok pattern  (0) 2023.02.17

logstash plugin을 이용하여 logstash-filter-bytes 설치

[root@tmplogsvr bin]# /usr/share/logstash/bin/logstash-plugin install logstash-filter-bytes
Using bundled JDK: /usr/share/logstash/jdk
Validating logstash-filter-bytes
Resolving mixin dependencies
Installing logstash-filter-bytes
Installation successful
[root@tmplogsvr bin]#

 

fortigate를 위한 logstash 패턴

####################################
###Fortinet Syslog Pattern Types:###
####################################

FORTILOG (?<TIMESTAMP>^\w+\s+\d+\s+\d+\:\d+\:\d+)\s(?<Client>\d+.\d+.\d+.\d+)\sdate=(?<DAY>\w+\-\w+\-\w+)\stime=(?<HOUR>\d+)\:(?<MINUTE>\d+)\:(?<SECOND>\d+)\sdevname="(?<Device_Name>.*)"\sdevid="(?<DEV_ID>\w+)"\slogid="(?<LOG_ID>\d+)"\stype="(?<LOG_TYPE>\w+)"\ssubtype="(?<SUB_LOG_TYPE>\w+)"

※ 기본 grok.pattern의 설정과 연계되어 있어 grok.pattern도 함께 작성 필요

 

fortigate를 위한 logstash 설정

[root@tmplogsvr bin]# cat /etc/logstash/conf.d/logstash.conf
input {
        file {
                path => "/var/log/rsyslog/192.168.10.14/*.log"
                start_position => "beginning"
                tags => ["fortigate"]
        }
}

filter {
        if "fortigate" in [tags] {
                grok {
                        patterns_dir => ["/etc/logstash/pattern.d"]
                        match => { "message" => [ "%{FORTILOG} %{GREEDYDATA:sub_message}" ] }
                }
                kv {
                        source => "sub_message"
                        value_split => "="
                }
                mutate { remove_field => [ "sub_message" ] }
                if "wan" in [srcintfrole] {
                        geoip {
                                source => "srcip"
                                target => "geoip_src"
                        }
                }
                if [sentbyte] != "" and [rcvdbyte] != "" {
                        bytes {
                                source => "rcvdbyte"
                                target => "receivedbyte"
                        }
                        bytes {
                                source => "sentbyte"
                                target => "sentedbyte"
                        }
                }
                mutate {
                        convert => {
                                "rcvdpkt" => "integer"
                                "sentpkt" => "integer"
                                "proto" => "integer"
                                "srcserver" => "integer"
                                "sessionid" => "integer"
                                "duration" => "integer"
                                "policyid" => "integer"
                                "HOUR" => "integer"
                                "MINUTE" => "integer"
                                "SECOND" => "integer"
                        }
                }
        }
}

output {
        if "fortigate" in [tags] {
                if "traffic" in [LOG_TYPE] {
                        elasticsearch {
                                hosts => ["http://192.168.0.17:9200"]
                                index => "logstash-fortigate-traffic-index-%{+YYYY.MM.dd}"
                        }
                }
                else if "event" in [LOG_TYPE] {
                        elasticsearch {
                                hosts => ["http://192.168.0.17:9200"]
                                index => "logstash-fortigate-event-index-%{+YYYY.MM.dd}"
                        }
                }
                else if "utm" in [LOG_TYPE] {
                        elasticsearch {
                                hosts => ["http://192.168.0.17:9200"]
                                index => "logstash-fortigate-utm-index-%{+YYYY.MM.dd}"
                        }
                }
        }
}

'기술 노트 > fortigate' 카테고리의 다른 글

웹 페이지 접근 보호  (0) 2023.05.23
로그인 알람 설정  (0) 2023.04.06
interface https http ssh 접속 허용 cli  (0) 2023.03.24
interface status cli  (0) 2023.03.24
system shutdown cli  (0) 2023.03.24

http://{IP}:9090 접속 시

 

설정한 장비(Agent)의 연결 확인

'기술 노트 > prometheus' 카테고리의 다른 글

prometheus 설정  (0) 2023.04.04
Prometheus 설치 및 실행  (0) 2023.03.21

기본 설정에 필요한 부분만 수정하였습니다.

각자 설치 시 재 설정 파일과 비교하시면 좋을 것아요.

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    scrape_interval: 5m
    scrape_timeout: 1m

    static_configs:
      - targets: ["localhost:9090"]

  - job_name: 'snmp'
    static_configs:
      - targets: ['192.168.10.2']  # SNMP device.
      - targets: ['192.168.10.3']  # SNMP device.
      - targets: ['192.168.10.4']  # SNMP device.
      - targets: ['192.168.10.5']  # SNMP device.
    metrics_path: /snmp
    params:
      module: [if_mib]
      community: [<각자 설정한 commuity  값>]
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.0.17:9116  # The SNMP exporter's real hostname:port.
  - job_name: 'grafana_metrics'
    scrape_interval: 15s
    scrape_timeout: 5s

    static_configs:
      - targets: ['192.168.0.17:3000']

'기술 노트 > prometheus' 카테고리의 다른 글

prometheus와 snmp_exporter 설치 결과  (0) 2023.04.04
Prometheus 설치 및 실행  (0) 2023.03.21

설정 파일 위치는 설치자에 따라 다를 겁니다.

제가 설치한 방법을 따라 하셨다면 아래의 경로에 해당 파일이 존재 합니다.

"/opt/snmp_exporter/snmp.yml" 

 

워낙 방대해서 기본 설정이외 수정한 부분을 표시합니다.

필요한 부분은 snmp community string의 설정입니다.

if_mib:
  auth:
    community: <snmp string을 기재> # "<", ">" 표시는 삭제해야 합니다.
  walk:
  - 1.3.6.1.2.1.2
  - 1.3.6.1.2.1.31.1.1
  get:
  - 1.3.6.1.2.1.1.3.0
  metrics:
  - name: sysUpTime
    oid: 1.3.6.1.2.1.1.3
    type: gauge
    help: The time (in hundredths of a second) since the network management portion
      of the system was last re-initialized. - 1.3.6.1.2.1.1.3
      .
      .
      .
      .
      .
      .
      .
      .
 --- 이하 생략 ---

'기술 노트 > snmp_exporter' 카테고리의 다른 글

snmp_exporter 설치 및 실행  (0) 2023.03.22

 

수동 시간 동기화

  • 명령어: timedatectl set-ntp true
[root@tmplogsvr prometheus]# timedatectl
               Local time: 화 2023-04-04 11:49:02 KST
           Universal time: 화 2023-04-04 02:49:02 UTC
                 RTC time: 화 2023-04-04 02:49:02
                Time zone: Asia/Seoul (KST, +0900)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no
[root@tmplogsvr prometheus]# timedatectl set-ntp true
[root@tmplogsvr prometheus]# date
2023. 04. 04. (화) 11:48:49 KST
[root@tmplogsvr prometheus]#

'기술 노트 > OS' 카테고리의 다른 글

원격데스크탑 세션 수 늘리기  (0) 2023.04.27
원격데스크탑 접속 오류  (0) 2023.04.27
NetworkManager의 IPv6 오류 메시지  (0) 2023.04.04
python default 버전 설정  (0) 2023.03.16
firewall 서비스 중지  (0) 2023.02.17

원인

  • 커널 수준에서 IPv6 지원이 비활성화되어 있는데, NetworkManager가 IPv6 주소를 구성하려고 하기 때문

 

진단 방법

  • 커널에서 IPv6이 비활성화되어 있는지 확인
  • NetworkManager 연결에 IPv6이 활성화되어 있는지 확인

 

오류 메시지

Apr  3 00:13:33 tmplogsvr NetworkManager[1076]: <warn>  [1680448413.7254] platform-linux: do-add-ip6-address[2: fe80::2ef0:5dff:fe5b:9b29]: failure 13 (허가 거부)
Apr  3 00:13:35 tmplogsvr NetworkManager[1076]: <warn>  [1680448415.7265] ipv6ll[f8fe362aab94bfad,ifindex=2]: changed: no IPv6 link local address to retry after Duplicate Address Detection failures (back off)

 

조치 방법

[root@tmplogsvr log]# nmcli
enp2s0: 연결됨 → enp2s0
        "Realtek RTL8111/8168/8411"
        ethernet (r8169), 2C:F0:5D:00:00:00, hw, mtu 1500
        IP4 기본값
        inet4 192.168.0.17/24
        route4 192.168.0.0/24 metric 100
        route4 default via 192.168.0.1 metric 100

virbr0: 연결됨 (외부) → virbr0
        "virbr0"
        bridge, 52:54:00:00:00:00, sw, mtu 1500
        inet4 192.168.122.1/24
        route4 192.168.122.0/24 metric 0

lo: 관리되지 않음
        "lo"
        loopback (unknown), 00:00:00:00:00:00, sw, mtu 65536

DNS configuration:
        servers: 168.126.63.1
        interface: enp2s0

알려진 장치에 대한 완전한 정보를 얻으려면 "nmcli device show"를 사용하고 활성
연결 프로파일에 대한 개요를 보려면 "nmcli connection show"를 사용하십시오.

자세한 사용법은 nmcli (1) 및 nmcli-examples (5) 매뉴얼 페이지를 참조하십시오.
[root@tmplogsvr log]# nmcli device modify enp2s0 ipv6.method "disabled"
'enp2s0' 장치에 연결이 성공적으로 다시 적용되었습니다.
[root@tmplogsvr log]# nmcli device modify virbr0 ipv6.method "disabled"
'virbr0' 장치에 연결이 성공적으로 다시 적용되었습니다.
[root@tmplogsvr log]#

'기술 노트 > OS' 카테고리의 다른 글

원격데스크탑 접속 오류  (0) 2023.04.27
시간 동기화  (0) 2023.04.04
python default 버전 설정  (0) 2023.03.16
firewall 서비스 중지  (0) 2023.02.17
GPG키 오류 날 경우  (0) 2023.02.16

html 코드 중 style에서 아래 해당 되는 부분 삭제

body, div, th, td, ol, ul, li, a, strong, span, input, select, textarea {
    color: #444444;
    font-family: Gulim,doutm,tahoma,sans-serif; <- 이부분
}

 

국가법령정보센터에서 법 내용을 소스코드로 가져오면 티스토리의 style이 깨지는 현상이 있어요.

이 때 소스 코드 중 위의  font-family 라인을 삭제하시고 html 붙여넣으시면 됩니다.

 

추가로 font 설정 변경하려면 아래 부분을 필요한 위치에 넣어주시면 원하는 font로 변경할 수 있습니다.

이렇게 하는 이유는 붙여넣기한 html 코드를 기본모드로 변경하여 보는 순간 html 코드가 티스토리에서 임의로 변경하네요.

그래서 가져오고 싶은 곳의 소스코드를 그대로 사용하면서 아래의 코드를 원하는 곳에 넣어주세요.

당연히 끝나는 부분에 "</div>" 코드도 추가해 주셔야 합니다.

<div style="font-family: 'Nanum Gothic';">
FortiGate-100D # config system interface
FortiGate-100D # show
config system interface
    edit "wan1"
        set vdom "root"
        set mode dhcp
        set allowaccess https ssh http
        set type physical
        set role wan
        set snmp-index 1
    next
    edit "dmz"
        set vdom "root"
        set ip 10.10.10.1 255.255.255.0
        set allowaccess ping https http fgfm fabric
        set type physical
        set role dmz
        set snmp-index 2
    next
    edit "modem"
        set vdom "root"
        set mode pppoe
        set type physical
        set snmp-index 3
    next
    ...
FortiGate-100D # edit <인터페이스 이름>
FortiGate-100D # edit wan1
FortiGate-100D (wan1) # show
config system interface
    edit "wan1"
        set vdom "root"
        set mode dhcp
        set allowaccess https ssh http
        set type physical
        set role wan
        set snmp-index 1
    next
end
FortiGate-100D (wan1) # set allowaccess ?
ping              PING access.
https             HTTPS access.
ssh               SSH access.
snmp              SNMP access.
http              HTTP access.
telnet            TELNET access.
fgfm              FortiManager access.
radius-acct       RADIUS accounting access.
probe-response    Probe access.
fabric            Security Fabric access.
ftm               FTM access.

FortiGate-100D (wan1) # set allowaccess <필요한 프로토콜 입력1> <필요한 프로토콜 입력2> ...
FortiGate-100D (wan1) # set allowaccess https http ssh

FortiGate-100D (wan1) # end

FortiGate-100D #

'기술 노트 > fortigate' 카테고리의 다른 글

로그인 알람 설정  (0) 2023.04.06
fortigate 6.2.X버전의 logstash 설정  (0) 2023.04.04
interface status cli  (0) 2023.03.24
system shutdown cli  (0) 2023.03.24
tftp 사용하여 펌웨어 복구  (0) 2023.03.24

+ Recent posts