環境はConoHaのVPSで標準のCentOS 7。/var/log/secure を見て見ると、ものすごい数の不正アクセスの試行が見て取れました。ちょっと看過できなかったので、対策しました。
ブルートフォースアタックか
ブルートフォースアタックとは要は総当り攻撃ですが、ログを見る限りどうもそんな感じです。色々なユーザー名で試行されています。danielって誰だ。調べてみると、中国のサーバーです。まったくもう中国は、まったくもう。このサイトにくるスパムコメントもだいたい中国語です。まったく中国はまったく。
VPSでサーバーを運営していれば、SSHは必須のサービスです。SSHサーバーを運用している以上、絶対にチェックしておかなければいけないのが、/var/log/secure です。しばらく見ないうちに、ものすごいことになっていました。
fail2banの導入
IPアドレスを指定してfirewallで遮断しても良いのですが、これからのことも考えて、自動で不正なログインをしようと繰り返すIPについて弾くようにしようと、fail2banを導入しました。これはログファイルから攻撃を検知し、firewallを自動的に弾くような設定をしてくれるものです。
「CentOS7での fail2banのインストールと設定方法(with firewalld) - Qiita」の記事を参考にさせていただき、fail2banを導入しました。ConoHaで標準のCentOS 7は、最初からEPELが有効になっている強気の設定なので、普通にyumでインストールすることができます。以下、firewalldは有効化されていることを前提にコマンド。
# yum install fail2ban
# systemctl start fail2ban.service
# systemctl enable fail2ban.service
# systemctl status fail2ban.service
-> サービスが起動していて、またenable(OS起動時にサービスも起動)になっていることを確認
設定ファイルを書き換えて、sshでの設定を有効にします。/etc/fail2ban/jail.confを、/etc/fail2ban/jail.localにコピーして、/etc/fail2ban/jail.localを書き換えます。/etc/fail2ban/jail.localに、[sshd]なるところがあると思うので、そこのところが書き換え該当箇所です。今回、以下のように書き換えました。
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
banaction = firewallcmd-ipset
bantime = 86400
enabledで有効化です。各項目の意味はまぁ名前の通りです。bantimeの86400はつまり86400秒、すなわち1日です。1日は長いのかもしれません。ただ、初期設定は600、つまり10分だったのですが、どうも今回攻撃しているのは随分と節操がないようで、解除されると即また攻撃を開始するしつこい奴だったので、もう1日にしてしまいました。再犯だけ一週間にするなども考えましたが、ひとまずこれで様子を見ます。
また、今回のエラーが、デフォルトのフィルターでは引っかからない感じだったので、/etc/fail2ban/filter.d/sshd.conf を編集してフィルターを追加しました(「fail2banでSSH攻撃対策を強化する(filter.d/sshd.confを編集する) | 本日も乙」を参考にさせていただきました)。具体的には、failregexのところに、以下の行を追加です。
failregex = (省略)
^%(__prefix_line)s.+Received disconnect from <HOST>: 11: *$
^%(__prefix_line)s.+Received disconnect from <HOST>: 11: \[preauth\]$
^%(__prefix_line)s.+Received disconnect from <HOST>: 11: Bye Bye \[preauth\]$
^%(__prefix_line)sreverse mapping checking getaddrinfo .* \[<HOST>\] failed - POSSIBLE BREAK-IN ATTEMPT!\s*$
エラーメッセージは/var/log/secureからコピペして、他の行を参考に書くとよいです。設定が終わったら、fail2banを再起動。
# systemctl restart fail2ban.service
そして、しばらく様子を見た後、ちゃんとフィルターがかかっているかどうか、以下のように確認。
# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/secure
`- Actions
|- Currently banned: 6
|- Total banned: 6
`- Banned IP list: (省略)
これで静かになりました。
firewalldでIPアドレスを指定して遮断
fail2banでbanしたものの、ログを見る限りいくつかのIPアドレスはもうずっと攻撃をし続けていることがわかりました。どうせ中国なので、これらについては手動で設定して永久遮断です。「[firewalld]特定のIPアドレスを接続拒否する方法 | (っ´∀`)っ ゃー | nullpopopo」を参考にさせていただき、firewall-cmdコマンドでfirewalldの設定をしました。
# firewall-cmd --zone=drop --add-source=xxx.xxx.xxx.0/24
# firewall-cmd --zone=drop --add-source=xxx.xxx.xxx.0/24 --permanent
# firewall-cmd --get-active-zones
-> 確認
今回の攻撃者は、IPアドレスを変えてちくちく攻撃するいやらしいやつだったので、xxx.xxx.xxx.0/24で、下3桁についてはまとめてブロックすることにしました。どうせ中国だし。
解除するときは、以下です。
# firewall-cmd --zone=drop --remove-source=xxx.xxx.xxx.0/24
# firewall-cmd --zone=drop --remove-source=xxx.xxx.xxx.0/24 --permanent
ひとまず静かになったが
しなくてはと思いつつ、ログの確認はついつい怠りがちです…。ひとまず静かになりましたが、今後も継続的にちゃんとログを確認するようにしないといけませんね。再犯者用のfail2banの設定、メールを飛ばすように設定するなどを、今後の課題として、当面は/var/log/secureの目視確認を怠らないようにします。
コメント
コメント一覧 (2件)
お久しぶりです!覚えておりますか?
7月期の二陸技の試験で合格できました。
いろいろありがとうございました
>たたたさん
お久しぶりです。そしておめでとうございます。高2で二陸技はすごいと思います。
二陸技が取得できたなら、一陸技もすぐそこですよ。ここまで来たらいっちゃいましょう。頑張ってください。