Visualize illegal ssh access attempts and access source

/var/log/secureをBigQueryに送り始め、sshdへのアクセスがあるIPアドレスを多い順に集計してみたりしています。

今回は日毎にssh接続の試行失敗回数を集計して、それに対するIPアドレスの内訳も出してみます。

こんなクエリを作成してみます。

SELECT
  LEFT(FORMAT_UTC_USEC(UTC_USEC_TO_DAY(time * 1000000)), 10) AS day,
  COUNT(ident) AS count_ident,
  REGEXP_EXTRACT(message, r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})') AS ip_address
FROM
  TABLE_DATE_RANGE(prod.syslog_secure_, DATE_ADD(CURRENT_TIMESTAMP(), -1, 'MONTH'), CURRENT_TIMESTAMP())
WHERE
  message CONTAINS 'error: PAM: System error for'
  AND ident = 'sshd'
GROUP BY
  day,
  ip_address
ORDER BY
  day

するとこのようなグラフが取得できました。

カラフルできれいなグラフですねえ… 全員攻撃者ですけどね!

あとRe:dashの設定で毎日グラフを更新するように設定しておきます。

さらにSlackにレポートとして出してみます。毎日午前11時にレポートするには以下のようなスラッシュコマンドを実行します。

/remind #チャンネル名 "http://Re:dashのドメイン/queries/クエリの番号" at 11AM every day

Re:dashとSlackの連携周りについての詳細は以下を参照。

感想

日々どのくらい自分のサーバに対してsshアクセスが試みられているのか可視化された。多い日は1日8万回以上も試行されている…。

firewalldの設定の見直しやsshdの設定の見直しを行う良い機会になりました。 SELinuxもpermissiveじゃなくてenforceでちゃんと運用していきたい…。