fail2banを使用したsshログイン試行の制限(sshを介してパスワードをブルートフォースしようとするボットの救済策)

画像



SSHは、特にキーペアベースの認証を要求するなどの合理的な予防策を講じている場合は、かなり安全です。ただし、root / rootやadmin / adminなどの一般的な侵害されたユーザー名とパスワードを使用してログインしようとすることで、脆弱なホストを見つけようとするボットはまだたくさんあります。成功する可能性は低いですが、それでも帯域幅を使用し、大量のログを生成します。



ブルートフォースログインの試行を最小限に抑える1つの方法は、SSHがリッスンするデフォルトのポートを変更することです。ただし、これはグッドプラクティスとは見なされません。まず、サーバーに接続するたびに、デフォルト以外の正しいポートを設定する必要があることに注意してください。さらに、選択したポートが1024より大きい場合、別のセキュリティの脆弱性が発生する可能性があります。通常、ルートのみが1024未満のポート番号にバインドできます。ただし、SSHに大きいポート番号を使用すると、特定の状況下で、ルートアクセス権のないユーザーが置き換えることができます。別の悪意のあるサービスとのSSHデーモン。

この問題を解決する最善の方法は、攻撃者がSSHサーバーにアクセスするのをブロックするツールを使用することです。そのような広く使用されているツールの1つは、fail2ban( www.fail2ban.org)です。ログを分析することにより、fail2banは繰り返し失敗した認証試行を検出し、攻撃者のIPアドレスから発信されたトラフィックを破棄するファイアウォールルールを自動的に設定します。



Ubuntuにfail2banをインストールする



手動インストール



Ubuntu(および他のDebianベースのディストリビューション)へのfail2banのインストールは非常に簡単です。



$ sudo apt install fail2ban
      
      





動作の確認



次のコマンドを使用して、サービスが実行されているかどうかを確認できます。



$ sudo systemctl status fail2ban



出力は次のようになります-サービスステータスはアクティブである必要があります:



● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-05-18 12:36:36 ***; ** min ago
       Docs: man:fail2ban(1)
    Process: 723*** ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
   Main PID: 723*** (f2b/server)
      Tasks: 5 (limit: 38293)
     Memory: 18.0M
     CGroup: /system.slice/fail2ban.service
             └─723488 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
      
      





fail2banがiptablesルールをどのように変更したかを見てみましょう。



$ sudo iptables -L -n -v
      
      





また、INPUTチェーンルールによって参照されるiptables構成に新しいf2b-sshdチェーンがあることも確認する必要があります。



Chain INPUT (policy ACCEPT 73411 packets, 6622K bytes)
 pkts bytes target     prot opt in     out     source               destination
 1019 65297 f2b-sshd   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22


Chain f2b-sshd (1 references)
 pkts bytes target     prot opt in     out     source               destination
    8   480 REJECT     all  --  *      *       94.191.93.46         0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       77.50.75.162         0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       51.254.143.190       0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       46.101.97.5          0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       43.129.28.88         0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       41.221.168.167       0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       35.247.219.12        0.0.0.0/0            reject-with icmp-port-unreachable
   12   720 REJECT     all  --  *      *       220.180.119.192      0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       218.75.121.75        0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       213.87.101.176       0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       192.139.15.34        0.0.0.0/0            reject-with icmp-port-unreachable
   21  1260 REJECT     all  --  *      *       187.104.145.210      0.0.0.0/0            reject-with icmp-port-unreachable
    8   480 REJECT     all  --  *      *       177.191.189.13       0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       159.89.82.134        0.0.0.0/0            reject-with icmp-port-unreachable
   10   600 REJECT     all  --  *      *       159.75.140.97        0.0.0.0/0            reject-with icmp-port-unreachable
    8   480 REJECT     all  --  *      *       157.92.13.105        0.0.0.0/0            reject-with icmp-port-unreachable
   11   660 REJECT     all  --  *      *       117.80.225.245       0.0.0.0/0            reject-with icmp-port-unreachable
    9   540 REJECT     all  --  *      *       106.53.121.179       0.0.0.0/0            reject-with icmp-port-unreachable
  865 56057 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0
      
      







fail2banパッケージには、fail2ban-clientというツールが含まれています。これにより、サービスのステータスを確認して操作することができます(たとえば、IPアドレスを手動でブロックおよびブロック解除したり、jailを有効または無効にしたりできます)。



アクティブなjailを確認しましょう。



$ sudo fail2ban-client status
      
      





Status
|- Number of jail:	1
`- Jail list:	sshd
      
      







刑務所は1つだけです-sshd-sqは、SSHサーバーログのログイン失敗を監視し、ファイアウォールルールを構成してそれ以上の試行をブロックします。



これで、sshdjailの統計を確認できます。



$ sudo fail2ban-client status sshd
      
      





Status for the jail: sshd
|- Filter
|  |- Currently failed:	8
|  |- Total failed:	26
|  `- File list:	/var/log/auth.log
`- Actions
   |- Currently banned:	22
   |- Total banned:	25
   `- Banned IP list:	106.53.121.179 117.80.225.245 157.92.13.105 159.75.140.97 159.89.82.134 177.191.189.13 187.104.145.210 213.87.101.176 218.75.121.75 220.180.119.192 35.247.219.12 41.221.168.167 43.129.28.88 46.101.97.5 51.254.143.190 77.50.75.162 94.191.93.46 1.55.165.141 120.53.245.68 104.131.178.145 106.56.102.83 152.32.146.21
      
      





fail2banの構成



ほとんどの場合、デフォルトの構成で十分です。ただし、これらのデフォルトとは何か、およびニーズに合わせてデフォルトを変更する方法を理解しておくと役立ちます。



標準構成では、fail2banはSSHサーバーを保護し、10分以内に5回のログイン試行が失敗した後、攻撃者を10分間ブロックします。デフォルトの設定ファイルは/etc/fail2ban/jail.confにあります。このファイルは十分に文書化されており、ほとんどが自明です。このファイルはfail2banの更新中に上書きされる可能性があるため、変更しないでください。



構成を変更した後、サービスを再起動することを忘れないでください。



$ sudo systemctl restart fail2ban
      
      





この場合、構成パラメーターを変更し、攻撃戦略を理解し、攻撃しているホストの毎日のリストを受け取り、それをブロックしたことに注意してください。



しかし、これが誰かにとって有用で興味深いものである場合は、後で別のメモでこれについて説明します。



All Articles