Fail2Banを試す
VPSサーバーのアクセス失敗ログを見てみると、大量のアクセスログがあったため、このようなブルートフォース攻撃への対抗策としてFail2Banを導入してみた時の備忘録。
不正アクセスログの確認
そもそも、VPSサーバーに対して不正アクセスログが大量にあることをどう確認するの?というお話。lastb
コマンドは、アクセスに失敗したユーザーを一覧化して表示させるため、これで見ると分かりやすいでしょう。
# lastb ubuntu ssh:notty 200.237.128.234 Thu Jun 8 11:59 - 11:59 (00:00) jorge ssh:notty 43.128.229.157 Thu Jun 8 11:59 - 11:59 (00:00) ros ssh:notty 152.228.180.220 Thu Jun 8 11:59 - 11:59 (00:00) ubuntu ssh:notty 196.28.248.220 Thu Jun 8 11:58 - 11:58 (00:00) dev ssh:notty 188.166.232.219 Thu Jun 8 11:58 - 11:58 (00:00) barman ssh:notty 200.237.128.234 Thu Jun 8 11:58 - 11:58 (00:00) recordin ssh:notty 218.150.246.42 Thu Jun 8 11:57 - 11:57 (00:00) admin ssh:notty 62.122.184.125 Thu Jun 8 11:57 - 11:57 (00:00) weather ssh:notty 196.28.248.220 Thu Jun 8 11:57 - 11:57 (00:00) nuraini ssh:notty 152.228.180.220 Thu Jun 8 11:56 - 11:56 (00:00) ram ssh:notty 223.113.121.94 Thu Jun 8 11:56 - 11:56 (00:00) csle ssh:notty 196.28.248.220 Thu Jun 8 11:56 - 11:56 (00:00) ubuntu ssh:notty 152.228.180.220 Thu Jun 8 11:55 - 11:55 (00:00) admin1 ssh:notty 188.166.232.219 Thu Jun 8 11:54 - 11:54 (00:00) roger ssh:notty 152.228.180.220 Thu Jun 8 11:54 - 11:54 (00:00) reporter ssh:notty 43.128.229.157 Thu Jun 8 11:54 - 11:54 (00:00)
…1分に3,4回くらい平均してアタックされてます^^;
アクセス失敗ログを確認して、上記のアタッカーのIPアドレスを塞ぎたいのが今回やりたいことです。
Fail2Banとは
一言で言うと、不正アクセスを予防するためのセキュリティ監視ソフトです。ログファイルに記録される内容を監視して、何度も認証に失敗しているログを見つけるとファイアーウォールを自動的に調整して接続元からの不正アクセスを禁止します。
参考:fail2banの使い方
Vagrant 2ノードで環境構築
以下、使ったVagrantfile
2ノードで環境を構築しました。server2
にFail2Banをセットアップし、server1
から連続でSSHアクセスを試みてみます。
Vagrant.configure("2") do |config| config.vm.provider "virtualbox" do |vb| vb.cpus = 1 vb.memory = 2048 end script = <<SCRIPT echo "192.168.56.44 server1" >> /etc/hosts echo "192.168.56.45 server2" >> /etc/hosts SCRIPT config.vm.define "server1" do |server1| server1.vm.box = "generic/rocky8" server1.vm.hostname = "server1" server1.vm.network "private_network", ip: "192.168.56.44" server1.vm.synced_folder "./shared", "/vagrant" server1.vm.provision :shell, :inline => script end config.vm.define "server2" do |server2| server2.vm.box = "generic/rocky8" server2.vm.hostname = "server2" server2.vm.network "private_network", ip: "192.168.56.45" server2.vm.synced_folder "./shared", "/vagrant" server2.vm.provision :shell, :inline => script end end
Fail2Banセットアップ
# dnf update # dnf install epel-release # dnf install fail2ban # cat <<EOF >/etc/fail2ban/jail.local [sshd] enabled = true bantime = 600 findtime = 10 maxretry = 1 EOF # fail2ban-client start Server ready # fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 0 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd `- Actions |- Currently banned: 0 |- Total banned: 0 `- Banned IP list:
攻撃検証
$ ssh vagrant@server2 vagrant@server2's password: Permission denied, please try again. vagrant@server2's password: Permission denied, please try again. vagrant@server2's password: vagrant@server2: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). $ ssh vagrant@server2 ssh: connect to host server2 port 22: Connection refused
パスワードが聞かれずに、Connection refused
となりました。
server2
にログインしてfail2banの状態を確認してみます。
# fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 3 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 192.168.56.44
Banned IP list
に追加されています。
※なお、今回の検証では、パスワード認証にて検証を行いましたが、公開鍵認証の場合はBanに追加されませんでした。公開鍵認証の場合は、fail2banで言うところの「ログイン失敗」に当たらないということでしょうか。
また、DoS攻撃に対してもfail2banは使えるそうなので、こちらの設定を今度の機会に設定していきたいと思います。