前回はnginxのアクセスログをredashに連携しましたが、
今回は/var/log/secureを試してみました。
sshのアクセスログですよ。
ここで誰がログインしようとしているのかバレバレです。8080。
きっと可視化すると面白いだろうなと!!!
ちなみにfluentdの仕様でログにあるtimeが出力されず後輩とハマりましたw
■syslog Input Plugin
https://docs.fluentd.org/v0.12/articles/parser_syslog
今回redshiftにぶち込むため、テーブルのカラムはrfc3164 patternを参考にします。(preは必要なし)
timeはfluentdが内部的に使っているフィールド名と同じなためkeep_time_key trueを入れないとログに吐かれません。(これを見過ごしてた)
・redshiftにあらかじめテーブルを作成する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# create table secure_log ( # time varchar(255) not null default '-', # host varchar(255) not null default '-', # ident varchar(255) not null default '-', # pid varchar(255) not null default '-', # message varchar(255) not null default '-' # ); CREATE TABLE # \d secure_log Table "public.secure_log" Column | Type | Modifiers ---------+------------------------+----------------------------------------- time | character varying(255) | not null default '-'::character varying host | character varying(255) | not null default '-'::character varying ident | character varying(255) | not null default '-'::character varying pid | character varying(255) | not null default '-'::character varying message | character varying(255) | not null default '-'::character varying |
・td-agent.conf
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
<source> type tail path /var/log/secure pos_file /tmp/secure.log.pos tag secure.log format syslog time_format %b %d %H:%M:%S keep_time_key true </source> <match secure.log> type jsonbucket output_tag redshift.secure.log json_key log </match> <match redshift.secure.log> type redshift file_type json # s3 aws_key_id xxxxxxxxxxxxxxxxx aws_sec_key xxxxxxxxxxxxxxxx s3_bucket redash s3_endpoint s3-ap-northeast-1.amazonaws.com path host01/secure_log/ timestamp_key_format %Y%m%d/%Y%m%d-%H%M # redshift redshift_host redash.xxxxxxxxxxxxxxxxxxxxxxxx.redshift.amazonaws.com redshift_port 5439 redshift_dbname host01 redshift_user root redshift_password HAHAHA redshift_schemaname public redshift_tablename secure_log redshift_copy_base_options TIMEFORMAT 'auto' TRUNCATECOLUMNS COMPUPDATE ON file_type json # buffer buffer_type file buffer_path /var/log/td-agent/buffer flush_interval 10m buffer_chunk_limit 1g </match> |
・確認
1 2 |
# tail -f /var/log/td-agent 2017-07-27 12:50:22 +0900 [info]: completed copying to redshift. s3_uri=s3://redash/host01/secure_log/20170727/20170727-1250_00.gz |
よしs3からredshiftにコピーされた。
※カラムが不一致な場合
1 |
[error]: failed to copy data into redshift due to load error. s3_uri=s3://redash/host01/secure_log/20170727/20170727-1247_00.gz error="ERROR: Load into table 'secure_log' failed. Check 'stl_load_errors' system table for details.\n" |
こんなエラーが出るはず。。
・redashダッシュボードにて
キタ━━━━(゚∀゚)━━━━!!
あとはselectしまくりだぜえええ!!
ちなみにどのIP & ユーザでアタック来ているのかベスト10!
ubntとはw
・SQL文はこんな感じ
1 |
SELECT split_part(message, ' ', 4),COUNT(*) AS COUNT FROM secure_log where message LIKE 'input_userauth_request: invalid user%' GROUP BY message ORDER BY COUNT desc limit 10; |
■まとめ
fluentd学習コスト高い。。。
しかしハマると何故か次の日に解決するので
ハマったら次の日にやろうw
redshift用のSQLコマンド(関数)リファレンスがamazon公式にあるので、
PostgreのSQLと間違えないようにw
http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/c_SQL_commands.html
http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/c_SQL_functions.html
参考
https://docs.fluentd.org/v0.12/articles/life-of-a-fluentd-event#event-structure
https://blog.lorentzca.me/send-secure-log-to-bigquery/
https://blog.vtryo.me/infra-engneering/redash-securelog-visualize
0件のコメント