/var/log/auth.logを見ていたら
今更かという気もしますが、auth.logの中に以下のような記録が多数残っているようです。
reverse mapping checking getaddrinfo for ***.***.***.*** ~ failed - POSSIBLE BREAK-IN ATTEMPT! User root from ***.***.***.*** not allowed because not listed in AllowUsers input_userauth_request: invalid user root[preauth] Connection closed by ***.***.***.***[preauth]
どうやらSSHに対して不正アタックを仕掛けているように見受けられます。そして多いのは中国・台湾辺りのドメイン。
間隔はまちまちで短いものは数分おきに、長いものは10~15分程度おいて仕掛けられています。
現状としてはパスワード認証はoff、秘密鍵を持っていないとログインできないようにしていますが、だからといって100%安全ということはないでしょう。
このままでは気持ち悪いので、状況について調べると共に可能であれば対策を打ちたいと思います。
SSHに対する不正アタック
何のためかといわれればもちろんサーバを乗っ取ることが目的でしょう。
データの破壊や改竄程度であれば被害は自分の中で納まります。が、何よりも怖いのは踏み台にされたりbot化して外部に対して危害を加えるようなサーバなってしまうこと。
日ごろからお世話になっているインターネット様に対してそんなことだけは絶対にしたくありません。
ログの記述を基に調べてみてもまず間違いなく不正アタックを食らっているようですので、引き続き対応を調べてみたところ参考になりそうなサイト様を発見しました。
こちらではログの調べ方と対応策をご教授くださっています。こちらを参考に自分も対策を検討してみました。
まずはログの解析
以下のコマンドを叩いて解析します。
gunzip -c /var/log/auth.log.*.gz | cat - /var/log/auth.log* | grep "POSSIBLE BREAK-IN ATTEMPT" | sed -e "s/.*getaddrinfo for //g" -e "s/ failed - .*//g" | sort | uniq -cd
色んな処理がパイプで繋がれているのはなんとなく分かりました。が、一個ずつ調べてみないと中身はさっぱり・・・ということでそれぞれ見てみました。
1.gunzip -c /var/log/auth.log.*.gz | cat - /var/log/auth.log*
gunzipコマンドはgzip圧縮されたファイルを復元するコマンドとのこと。「-c」オプションの場合は結果を標準出力し、元のファイルには手を加えないということ。
catコマンドはファイルの内容を表示するコマンドなので、今回の場合はパイプによって渡されたgunzipコマンドの結果と元々圧縮されていない/var/log/auth,.logと/var/log/auth.log.1を繋げてくれます。
2.~ | grep "POSSIBLE BREAK-IN ATTEMPT"
1で得られた結果から"POSSIBLE BREAK-IN ATTEMPT"という文字列が含まれた行を抽出しています。
ちなみにここまでだけで動かすと例えば
reverse mapping checking getaddrinfo for 235.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.235] failed - POSSIBLE BREAK-IN ATTEMPT!
みたいな感じで抽出されます。
3.sed -e "s/.*getaddrinfo for //g" -e "s/ failed - .*//g"
sedコマンドはファイル内の文字列の置換を行うコマンドですが、ここでは2の結果の中から「getaddinfo」という文字列~「failed・・・」までの間に記述されているサーバ名を抜き出すのに使用されているようです。う~ん、頭が痛くなってきた・・・
4.sort | uniq -cd
sortコマンドは3の結果をアルファベッド順で並べ替えるため使用されています。
uniq -cdの部分は並べ替えた結果をサーバ名ごとにカウントし、件数を算出しています。
uniqコマンドを使用するためにはファイルの中身がきちんとソートされていることが必要だそうで、そのために一度sortコマンドを掛けた後にパイプで渡してuniqを実行しているのだと思われます。
ちなみにこのuniqコマンド、重複行を削除するのにも使用されるようですが「-c」オプションで行のカウントを、「-d」オプションで重複行も含めての処理とすることでどのサーバから何回攻撃を喰らったかが分かる、という仕組みのようです。
結果は以下の通りです。
7 . [192.3.160.68] 68 112.206.228.98.pldt.net [112.206.228.98] 2 162.140.202.1.static.bjtelecom.net [1.202.140.162] 5 184.50.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.50.184] 77 196.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.196] 2 198.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.198] 2 199.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.199] 4 200.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.200] 4 201.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.201] 146 202.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.202] 14 203-113-122-163.totisp.net [203.113.122.163] 4 203.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.203] 2 204.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.204] 2 206.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.206] 64 207.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.207] 13 208.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.208] 5 209.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.209] 6 211.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.211] 3 213.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.213] 59 214.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.214] 2 215.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.215] 3 218.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.218] 32 219.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.219] 55 222.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.222] 2 223.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.223] 5 224.50.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.50.224] 34 224.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.224] 4 226.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.226] 2 227.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.227] 6 228.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.228] 7 235.51.174.61.dial.wz.zj.dynamic.163data.com.cn [61.174.51.235] 3 50-57-184-94.static.cloud-ips.com [50.57.184.94] 53 58-181-246-39.tainetwork.com [58.181.246.39] 1876 91.232.140.79.rudna-net.pl [91.232.140.79] 22 abs-static-154.213.102.118.aircel.co.in [118.102.213.154] 531 abts-kk-static-034.32.144.59.airtelbroadband.in [59.144.32.34] 6 aircel-gprs-10.89.251.27.aircel.co.in [27.251.89.10] 15 c20029238-61.consulnetworks.com.co [200.29.238.61] 105 chn-static-78-173-16-61.direct.net.in [61.16.173.78] 2 hn.kd.ny.adsl [222.136.82.221] 38 ip-static-94-242-255-137.as5577.net [94.242.255.137] 40 lardnerserver.datahop.com [184.154.150.118] 13 mx-ll-180.183.70-98.dynamic.3bb.co.th [180.183.70.98] 112 unassigned.psychz.net [216.99.158.77]
まとめ
自分のサーバの場合、月にせいぜい数千アクセスがある程度ですがそれでも結構な数の不正アタックを受けていることが分かりました。
しかも今回はsshdに対してのみカウントしています。メールサーバやFTPなども含めるともっとたくさんになるでしょう。
このままにしておくのはとっても気分悪いので、次はこれらに対する撃退法を検討してみたいと思います。
もちろんsshdに対するものになりますが・・・。ほかはまたいずれ改めてということで。