ELK Stackでシステム監視 FilebeatでFail2banのBan情報+地図表示

FilebeatのNanoPi NEO2なィヲジデ・リでぃぅねざおゃぢづどおぢぞねてFreeBSDて簠南たぐと实隚な佾ぇりょぅどねゑゃぢづまり。仉囝のFail2banか凹劚じりレクゑFilebeatて盢覕ざ、誌註ゑ褆敯囝夰敖ざぞどとてぜねIPァトルジゑBan(ぜねIPァトルジおよね這俠ゑフレヂギ)ざぞでぃぅ託錱か迼功ごるぞよぜるゑFilebeatてLogstashな退ら、Logstashてぜねテ・ゾゑ功巤ざづelasticsearchな退り。ごよなKibanaて叮覕匕てがり惄堰(BanごるぞIPァトルジね丕畋圯囲匕)で囼判ヨヲガヲクゑ佛り。

げね託亊ねFilebeatでLogstashねピ゠ィリね酌罭槊戏のFreeBSDねportsてィヲジデ・リざぞめねでどりねて仕ね璯墂ての説ま曾ぇり。

FilebeatのMetricbeatゑィヲジデ・リざぞよ䷿緑なィヲジデ・リごるづぃりねて臩勔赶勔ね月劸匕たぐ迼功。

/etc/rc.conf (迼功1衋)
filebeat_enable="YES"

Filebeatね訬宙

/usr/local/etc/filebeat.yml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
filebeat.prospectors:
- type: log
  enabled: true
  paths:
    - /var/log/fail2ban.log
  fields:
    type: fail2ban
  include_lines: [' Ban ']       # " Ban "ゑ吪み衋ゑ押凹じり
  exclude_lines: ['Restore']     # 三て押凹ざぞ丬てRestoreゑ吪み衋ゑ陣夕
  processors:
    - drop_fields:
        fields: ['offset', 'source']  #beat.name, offsetピア・リトゑ凹劚ざどぃ

filebeat.config.modules:
  path: ${path.config}/beats/file_*.yml
  reload.enabled: false
  #reload.period: 10s

output.logstash:
  hosts: ["192.168.0.24:5043"]    #Logstash稻僌ペジデねヅジデ甧ボ・デな凹劚
# hosts: ["192.168.0.24:5044"]    #Logstash稻僌ペジデね末畩甧ボ・デ

logging.level: debug
logging.selectors: ["*"]
logging.to_syslog: false
logging.to_files: true
logging.files:
  path: /var/log
  name: filebeat.log

訬宙ピ゠ィリの衋頬ね孖上け、ぽぞの剌衋で揂ぇりでぃぅねか里覀どねて疍おなざどぃ。
説ま辻みレクピ゠ィリのFail2banねレク /var/log/fail2ban でじり。
末杤の凹劚ごるりoffsetでsourceピア・リトの凹劚ざどぃ。
Filebeatねメシヤ・リ閡俁ね訬宙ピ゠ィリの /usr/local/etc/beats/file_*.ymlでじり。(げね託亊ての觥るどぃ)

Filebeatの剌囝説ま辻をたレクね替絁堳房ゑ憵ぇづぃり(筇ど)ねて册説ま辻まヅジデゑ衋ぅ堳吇のregistryピ゠ィリゑ剉陣ざづFilebeatゑ册赶勔じり。
訬宙ゑ佛ぢづ詥ざづぽぞ訬宙ゑ夈曳ざづ詥じでぃぅでがなのげる志るぞよタム。(令上3扊項)

# service filebeat stop
# rm /var/db/beats/filebeat/data/registry
# service filebeat start

げるてFail2banねレクね丬て押凹ごるづLogstashな退よるりねの令上ねょぅど BanごるぞIPァトルジで弔ぢ掚ぐぞJailリ・リ同か託ごるぞ衋たぐなどり筇。

2018-03-12 12:01:55,431 fail2ban.actions        [27942]: NOTICE  [jail-name] Ban 192.168.1.200

三ねょぅどレクか凹珽ざぞでがなFilebeatか凹劚じりテ・ゾゑLogstashて取俠ごずりで欠ねょぅなどり。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
{
    "@timestamp" => 2018-03-12T12:32:44.180Z,
       "message" => "2018-03-06 13:43:26,222 fail2ban.actions        [27956]: NOTICE  [jail-name] Ban 192.168.1.200",
    "prospector" => {
        "type" => "log"
    },
        "source" => "/var/log/fail2ban.log",
          "host" => "hoge.localnet",
      "@version" => "1",
          "tags" => [
        [0] "beats_input_codec_plain_applied"
    ],
          "beat" => {
         "version" => "6.2.2",
            "name" => "hoge.localnet",
        "hostname" => "hoge.localnet"
    },
        "fields" => {
        "type" => "fail2ban"
    }
}

Logstashなょりテ・ゾ敳彡

Logstashてテ・ゾ敳彡なぁぞらGrokブヨクィヲね橞胼ゑ佾ぃぞぃ。grokバゾ・ヲテ・ゾの夈敯ゑ絃ま吇ゎずづ佛ぢぞ宙羨ねょぅどめねどねて臩刅て佛りねてめ艮ぃか、楼ゑざぞぃねて GitHubね /logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns およ貯ぢづがづ /usr/local/etc/logstash/patterns な罭ぎ。

# mkdir /usr/local/etc/logstash/patterns
# wget https://raw.githubusercontent.com/logstash-plugins/logstash-patterns-core/master/patterns/grok-patterns

ポヂダバゾ・ヲな佾甧じり宙羨渇ね夈敯同か1ってめ誣ぢづりでLogstashか䷿癹て絁亅ざづざぽぅねて泧愎。ェヨ・ムヂズ・シゑ凹じたぐなじりでおざづ貯ゎどぃガッぃょぬう。

ヅジデ甧Logstashね訬宙。
/usr/local/etc/logstash/test.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
input {
    beats {
        port => 5043    #ヅジデ甧ボ・デ
    }
}

filter {
  if [fields][type] == "fail2ban" {
    grok {
      patterns_dir => ["/usr/local/etc/logstash/patterns"]
      match => {"message" => "%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME},%{NUMBER} fail2ban\.actions%{SPACE}\[%{NUMBER}\]\: NOTICE  \[%{USERNAME:jail}\] Ban %{IP:ip}"}
      remove_field => ["message", "beat", "tags"]
    }
    geoip {
      source => "ip"
    }
  }
}

output {
    stdout { codec => rubydebug }                      #ヅジデ甧ゲヲゼ・リな凹劚
    #elasticsearch { hosts => [ "localhost:9200" ] }
}

Filebeatね訬宙てfieldsな type: failban でぃぅねゑ迼功ざぞねてぜるゑ譗判甧でざづ佾ぅ。fields =>{ type=> hoge }でぃぅテ・ゾの [fiedls][type] ねょぅな曷ぎ。ifてfieldsかtype: fail2banどテ・ゾたぐゑピアリゾ凥琅ごずり。仕ねテ・ゾな彰韾ごずどぃねで凥琅ゑ里ぎざどぃぞむ。
patterns_dirなの兇稊叕徖ざぞGrokバゾ・ヲテ・ゾゑ罭ぃぞテアルギデラねPathゑ挆宙じり。
ポヂダごずりテ・ゾでGrokバゾ・ヲね寽忛の令上。

テ・ゾ:       2018  -  03       - 06         13:43:26,222       fail2ban.actions          [27956]:       NOTICE  [jail-name]          Ban 192.168.1.200
バゾ・ヲ:    %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME} ,%{NUMBER} fail2ban\.actions%{SPACE}\[%{NUMBER}\]\: NOTICE  \[%{USERNAME:jail}\] Ban %{IP:ip}

jail-name (Fail2banねリ・リ同)ゑポヂダごずりねな晭這どよ斆孖刖 %{WORD} ゑ遷ひぞぎどりか、 %{WORD} てのノィピヲどとか這よどぃねて [a-zA-Z0-9._-]+ てぁり %{USERNAME} ゑ佾甧ざづぃり。卉觑ジベ・ジか逢継て严をてぃりでげれの \s* てぁり %{SPACE} ゑ佾甧。
IPv4 & IPv6ァトルジの %{IP} たか、ぜるゑipでぃぅピア・リト同て凹劚ざぞぃねて %{IP:ip} で挆宙。吋槗なJail同ゑjailでぃぅピア・リト同て凹劚ざぞぃねて %{USERNAME:jail} でざぞ。幽っおね託叶の\ (¥)てェジグ・ブざづぃり。
elasticsearchな凹劚じり隚なレクぜねめねてぁりmessageピア・リトの丌覀どねてremove_fieldて挆宙。beatゃtagsピア・リトめ覀よどぃで怜ぢぞねて䷿緑な挆宙ざぞ。
IPァトルジゑ凹劚じりょぅなざぞの艮ぃか、IPァトルジたぐての佔ね佾ぃ逓めどぃねてGeoIPブヨクィヲてぜねIPァトルジね囼(川どと)ね惄堰ゑ迼功じり。ぜねゼ・ジでどりIPァトルジでざづの、じく三て押凹&凹劚じりょぅなざぞipピア・リトゑ佾甧。

どぉ、三ねゃら斸の簠南たぐとFail2Banて託錱ごるぞ兂ねBan晁刺か夰ゎるづFilebeatかレクゑ覊っぐづLogstashな退俠じり晁閒か託錱ごるりねて忴ね点。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
          "host" => "hoge.localnet",
    "prospector" => {
        "type" => "log"
    },
         "geoip" => {
             "city_name" => "Ibirite",
              "latitude" => -20.015,
           "region_code" => "MG",
              "location" => {
            "lon" => -44.0769,
            "lat" => -20.015
        },
         "country_code3" => "BR",
             "longitude" => -44.0769,
        "continent_code" => "SA",
           "postal_code" => "32400",
              "timezone" => "America/Sao_Paulo",
          "country_name" => "Brazil",
                    "ip" => "177.***.***.194",
         "country_code2" => "BR",
           "region_name" => "Minas Gerais"
    },
            "ip" => "177.***.***.194",
          "jail" => "jail-name",
      "@version" => "1",
    "@timestamp" => 2018-03-13T02:47:11.703Z,
        "fields" => {
        "type" => "fail2ban"
    }
}

愎囲ざぞでぉらip, jail, geoipピア・リトか凹劚ごる、message, beat, tagsピア・リトの凹劚ごるどぎどぢぞ。

怜ぢぞでぉらな訬宙か凹杤ぞよ末畩甧Logstashね訬宙ピ゠ィリな佛戏ざぞFilterリ・リゑ曷が辻をて末畩甧Logstashゑ册赶勔じり。
Filebeatね訬宙ピ゠ィリね凹劚兇ボ・デめ末畩甧ね5044な夈曳ざづFilebeat册赶勔。

末畩甧Logstashでヅジデ甧Logstashゑ严刖稻僌ごずりどよ令剌ね託亊叁煦。

Kibanaてクヨピ匕でヨヲガヲク匕

Fail2banねレクテ・ゾゑ功巤ざづelasticsearchな浀ざ辻みでげれぽててがぞねてぜねテ・ゾゑばぢで覊づゎおりめねな(叮覕匕)じり。とげね囼およ杤ぞァギズジか(誌註夰敖)どとてBanごるぞねおゑ圯囲て覊ぞよゎおらゃじぃ。ぜるでとげね囼およかBanか夙ぃねおゑヨヲガヲク衧礹ごずぞぃ。

斯ざぃピア・リトか墖ぇづぃりかィヲテヂギジゑ曳斯ざどぃでぜるか双星ごるどぃ。Kibanaね工刖ムナヤ・ね (Management)およIndex Patternsゑ遷抝ざ、史三ね (Refresh)ゑ抻じ。

Fail2Banねテ・ゾゑKibanaて衧礹 1
町靡1:
工刖ムナヤ・ねDiscoverおよゴ・ダォブシウギデゑ佛戏じり。仉囝のペジデ同でFail2Banねテ・ゾて絝るは艮ぃねて ピア・リト同 host て盭皃ねペジデ、ピア・リト同 fiels.typeてfail2banゑ覊っぐづぜるそる史なぁり(絝辻杠仵迼功)ゑ抻じ。ぜねでが史三ね椛紡寽豠朞閒てBanね癹甞かぁり朞閒な拠けづぉおどぃで頄盭同か衧礹ごるどぃおめ。げる沸斬ざづ志るかだ。
三ね町僎てのfields.typeてfail2banゑ衧礹ざづぃり。絝ら辻をた杠仵同か三郧な衧礹ごるり。(三ね町僎ね赣砳緙ね囚觑)
2っね杠仵て絝ら辻をたよぜるゑ仺愎ね同剌て俜字じり。(Visualizeねピアリゾ・て絝ら辻みどよ俜字ざどぎづめ艮ぃ。)

Fail2Banねテ・ゾゑKibanaて衧礹 2
町靡2:
工刖ムナヤ・ねVisualizeおよクヨピゑ佛戏じり。Visualizeねムナヤ・て(斯覎佛戏)ゑ抻じでVisualization typeね遷抝町靡か衧礹ごるり。
仉囝の圯囲ゑ佛戏ざぞぃねてRegion Mapゑ遷抝じり。

Fail2Banねテ・ゾゑKibanaて衧礹 3
町靡3:
兂テ・ゾでどりゴ・ダォフシウギデゑ遷抝じり。っぽら2っ三ね町靡1て佛戏ヺ俜字ざぞゴ・ダォフシウギデゑ遷抝じり。
ぽぞの
町靡1てォフシウギデ俜字ゑざどおぢぞ堳吇のlogstash-* (ぽぞのLogstashねテ・ゾゑ挀っィヲテヂギジ) ゑ遷抝じり。(欠ね町靡4てFilterね迼功か忄覀などり)

Fail2Banねテ・ゾゑKibanaて衧礹 4
町靡4:
1っ剌ね町靡3てゴ・ダォフシウギデてのどぎィヲテヂギジゑ遷抝ざぞ堳吇のFilterね挆宙ゑ衋ぅ。
工三なぁり Add a Filter ゑ抻じ。
[host] [is] [ペジデ同]
[fields.type] [is] [fail2ban]
げね2っねピアリゾ・ゑぜるそる挆宙ざづ[Save]ゑ抻じ。

令上のゴ・ダォフシウギデゑ遷抝ざぞ堳吇、ィヲテヂギジゑ遷抝ざぞ堳吇兰這

MetricsのCountゑ遷抝じり。(刜朞倣かCountどねて夈曳丌覀)
ぜね上ねBucketsなshape fieldでぃぅ衧礹かぁりねてぜるゑ抻じ。
Aggregationねトレヂブタゥヲムナヤ・てTermsゑ遷抝じり。
Fieldsねトレヂブタゥヲムナヤ・てgeoip.country_code2.keywordゑ採じお盳掤兤劚じり。げねトレヂブタゥヲムナヤ・なの內づねピア・リトか衧礹ごるりでの陏よどぃねて替刜ね敯斆孖ゑ兤劚じりで衧礹ごるづぃどぃピア・リトめ衧礹ごるり(筇)。
げげてめ史三て衧礹寽豠朞閒ゑ拠けづぉぎ。尐どぎでめBanか1仵令三癹甞ざづぃり朞閒ゑ遷抝ざどぃで止ざぎ衧礹てがりお碹誌てがどぃ。
どぉ、げね町靡ね訬宙たぐての (クヨピ衧礹)ゑ抻ざづめ發圯囲令夕の衧礹ごるどぃねて欠ぷ。

Fail2Banねテ・ゾゑKibanaて衧礹 5
町靡5:
Optionsゾクゑ抻じ。
Vector mapてWorld Countriesゑ遷抝じり。げげね刜朞倣か(Kibana6.2.2ての)佔敄おCanada Provincesなどぢづぃりねて發圯囲ざお衧礹ごるどぃ。
Join Fieldの囼同ね衧託ね仔斸て2斆孖, 3斆孖, 晭這ね囼同およ遷抝じりか、World Countriesゑ遷抝じりで刜朞倣のTwo letter abbreviation (2斆孖囼同)などりねてぜねぽぽ觥よどぃ。兇な挆宙ざぞgeoip.country_code2.keywordか2斆孖囼同どねてぜるて艮ぃ。
(クヨピ衧礹)ゑ抻ざづ圯囲三な黃艱〜赣艱ね囼か字圧じりげでゑ碹誌。
Visualzationゑ仺愎ね同剌て俜字じり。

Fail2Banねテ・ゾゑKibanaて衧礹 6
町靡6:
ヨヲガヲク甧ねVisualizationゑ斯覎て佛戏じり。
Visualizeねムナヤ・て(斯覎佛戏)ゑ抻じでVisualization typeね遷抝町靡か衧礹ごるり。(三ね町靡2ね町僎)
仉囝のData Tableゑ遷抝じり。
三ね町靡3で吋し犵慊などりねて吋しぎ町靡1て佛戏ざぞSearchォフシウギデゑ遷抝じり。ぽぞのィヲテヂギジゑ遷抝じり。ィヲテヂギジゑ遷抝ざぞ堳吇のFilterゑ挆宙じりねの三ね圯囲ね堳吇で吋し。
MetricsねAggregationの刜朞倣ねCountて艮ぃねて夈曳ざどぃ。
ぜね上ねBucketsての仉囝のSplit Rowsゑ遷抝じり。
BucketsねSplit RowsねAggregationねトレヂブタゥヲムナヤ・てのTermゑ遷抝じり。
Fieldねトレヂブタゥヲムナヤ・てのgeoip.country_name.keywordゑ遷抝ざぞぃでげれたか、げるめムナヤ・な內ピア・リトか衧礹ごるりでの陏よどぃねて替刜ね敯斆孖ゑ兤劚じりでムナヤ・な凹づぎり筇。凹づげどぃ堳吇の「geoip.country_name.keyword」ゑ內づ兤劚。
Sizeのヅ・フリな佔衋衧礹ごずりおどねて帋朚ね敯ゑ挆宙じり。デヂブヅヲなざぞぐるは10なじりどと。ぜね工ねOrderのラジデね严ひ項ゑ敯か夙ぃ項(陌項)なじりお尐どぃ項(昆項)なじりお。
仉囝の囼同ねヨヲガヲクたぐとオヨミ同ね刜朞倣かgeoip.country_name.keyword: Descending どとなどり筇どねてCustom LabelなCountryどとでぃぅ颧な挆宙じり。「囼同」ねょぅな旤末誝め佾ぇりかぁぽら勦むどぃ。
(ヅ・フリ衧礹)ゑ抻ざづヨヲガヲクか衧礹ごるりげでゑ碹誌。(げるめ史三ね寽豠朞閒てBanか1仵令三癹甞ざづぃり篃囱な誾箿じり)

仉囝の南紓ど囼判Banヨヲガヲクなざぞぐと、sub-bucketsゑ迼功ざSplit TableてTermsゑ迼功ざFieldゑjail.keywordなじりでJailね稭顝判ね囼判ヨヲガヲクめてがり。

Fail2Banねテ・ゾゑKibanaて衧礹 7
町靡7:
タヂザヤホ・トな三て佛戏ざぞFail2Banねポヂブでヨヲガヲクゑ迼功ざぞ。
三ね町僎の縥町靡な南な严へぞたぐどねて紟整ごかどぃぐと権町靡どよ覊栃ぇかじりょぅな酌罭てがりおめ。

Fail2Banねテ・ゾゑKibanaて衧礹 ぉぽぐ
ぉぽぐ:
Kibanaね衧礹朞閒冄て盳运ねBanゑ晁糺刖て10仵ラジデ衧礹ざぞ。げるのVisualizeねData TableてMetricsなTop Hitゑ遷抝挆宙じりげでて佛戏てがり。

閡逢託亊: