Ubuntu 16.04でPyFilterを使用して不要なSSHログイン試行をブロックする方法

_著者はhttps://www.brightfunds.org/organizations/code-org[Code.org]を選択して、https://do.co/w4do-cta [Write for DOnations]プログラムの一環として200ドルの寄付を受け取りました。 _

前書き

Secure Shell(SSH)は、ネットワークサービスを安全に運用するための暗号化ネットワークプロトコルです。 通常、コンピューターシステムのリモートコントロールやファイルの転送に使用されます。 SSHがパブリックインターネットに公開されると、セキュリティの問題になります。 たとえば、ブルートフォース方式でパスワードを推測しようとするボットが見つかります。

PyFilterは、サーバーへの不正なログインリクエストをすべて除外し、送信されたリクエストが多すぎる場合はブロックすることを目的としています。 ログファイルを読み取り、失敗したリクエストがユーザー設定可能な時間内に同じIPアドレスから送信されたかどうかを確認することで機能します。 その後、失敗した試行が多すぎる場合、ファイアウォールにルールを追加し、サーバーへの接続を拒否します。

このチュートリアルでは、PyFilterをインストールして設定し、SSHリクエストをブロックします。 次に、PyFilterをサービスとしてインストールし、オプションでクロスサーバー禁止同期を設定します。これは、複数のサーバーが禁止IPアドレスのリストを共有できるようにし、PyFilterがIPアドレスに関する位置データを記録できるようにする機能です 最後に、IPアドレスの禁止を解除する方法を調べます。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 [Ubuntu 16.04初期サーバーセットアップガイド]に従って、1つのUbuntu 16.04サーバーをセットアップし、sudo non- rootユーザーとファイアウォール。

  • Python3。Ubuntu16.04にデフォルトですでにインストールされています。

  • `+ sudo apt-get install python3-pip +`でインストールされたPIP。

  • (オプション)https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-redis-on-ubuntu-16-04[Ubuntu 16.04にRedisをインストールする方法] if link:#step-4-%E2%80%94-configuring-pyfilter-for-cross-server-ban-syncing-optional [ステップ4]でPyFilterのクロスサーバー禁止同期機能を設定します。

ステップ1-PyFilterのダウンロードと設定

Githubからリポジトリを複製してPyFilterをダウンロードします。 ホームディレクトリに切り替えて、リポジトリを複製します。

cd ~
git clone https://github.com/Jason2605/PyFilter.git

これにより、 `+ PyFilter `というディレクトリが作成されます。 このフォルダーを ` / usr / local`フォルダーに移動します。

sudo mv PyFilter /usr/local/PyFilter

次に、 `+ / usr / local / PyFilter +`ディレクトリに移動します:

cd /usr/local/PyFilter

次に、構成ファイルを作成する必要があります。 PyFilterには、 `+ Config / config.default.json`にあるデフォルトの設定ファイルが付属しています。 デフォルトのファイルを直接編集するのではなく、これをコピーしてコピーしたバージョンを編集します。 このようにして、何かがうまくいかなかった場合、比較するデフォルトの設定ファイルがあります。

デフォルトの構成ファイルをコピーします。

sudo cp Config/config.default.json Config/config.json

`+ less +`コマンドを使用して設定ファイルの内容を表示できます:

less Config/config.json

デフォルト設定では、要求は最後の要求から5秒以内である必要があり、それは5回発生する必要があります。 PyFilterを実行して、動作を確認しましょう。

ステップ2-PyFilterの実行

PyFilterのダウンロードには、PyFilterの起動に使用する必要のある「+ run.sh +」というスクリプトが含まれています。

最初に、スクリプトの権限を変更して実行可能にします。

sudo chmod +x run.sh

許可が与えられたら、スクリプトを実行してPyFilterを起動します。

./run.sh

PyFilterはログの監視を開始し、イベントが発生すると出力が表示されます。

OutputNo file to check within rule: Mysql
No file to check within rule: Apache
No file to check within rule: Nginx
Checking Ssh logs

デフォルトでは、PyFilterは、前の失敗したリクエストから5秒以内に発生する5つ以上の失敗したリクエストを行うIPを禁止します。 これはPyFilter構成ファイルで変更できます。

これらの結果は `+ / usr / local / PyFilter / Log +`ディレクトリにも記録されます。

IPが禁止を保証する制限に達すると、次のような出力が表示されます。

Output2018-03-22 14:18:18 Found IP:  from server: .

PyFilterを閉じるには、 `+ CTRL + C +`を押します。

次に、PyFilterをサービスとしてインストールして、自動的に実行されるようにします。

ステップ3-PyFilter用のサービスを作成する

PyFilterが機能することがわかったので、サーバーとして再起動するたびに起動するように、サービスとして実行するようにPyFilterを設定しましょう。

`+ PyFilter `ディレクトリ内には、PyFilter用のサービスを作成し、システムの起動時に実行できるようにする ` install.sh +`というスクリプトがあります。

実行できるようにスクリプトを変更します。

sudo chmod +x install.sh

次に、スクリプトを起動します。

./install.sh

次の出力が表示され、インストールが成功したことが示されます。

OutputService created and enabled, check the status of it by using "sudo systemctl status PyFilter"

それでは、すべてが正しく実行されていることを確認するために、ちょうどそれをしましょう

sudo systemctl status PyFilter

次の出力が表示され、サービスが「+ active +」であることを示します。

Output● PyFilter.service - PyFilter
  Loaded: loaded (/etc/systemd/system/PyFilter.service; enabled; vendor preset: enabled)
  Active: <^>active^> (running) since Wed 2018-03-21 18:55:35 UTC; 12s ago
Main PID: 8383 (bash)
  CGroup: /system.slice/PyFilter.service
          ├─8383 bash /usr/local/PyFilter/run.sh
          ├─8384 sudo python3 run.py
          └─8387 python3 run.py

エラーが表示された場合は、インストール手順を再度確認してください。

次に、禁止されたIPアドレスを他のサーバーと共有するようにPyFilterを構成する方法を見てみましょう。

ステップ4-クロスサーバー禁止同期のためのPyFilterの設定(オプション)

クロスサーバー禁止の同期により、禁止されたIPアドレスをPyFilterを使用して他のすべてのサーバーと同期し、それらを保護し、禁止される資格を満たしていない場合でもそのアドレスを禁止できます。 これは、IPがすでに禁止されているため、他のシステムを標的とする潜在的なボットよりも一歩先を行くことができることを意味します。

前提条件で述べたように、Redisをインストールして構成する必要があります。

+ redis + Pythonモジュールも必要です。これは `+ pip +`でインストールできます:

pip3 install redis

次に、SQLiteの代わりにRedisを使用するように構成ファイルを編集します。 テキストエディターで `+ Config / config.json`ファイルを開きます。

nano Config/config.json

次の行を見つけます。

Config / config.json

"database": "sqlite"

+ sqlite`を + redis`に変更します。

Config / config.json

"database": ""

次に、Redis接続情報を変更します。 ファイルのこのセクションを見つけます。

Config / config.json

 "redis": {
   "host": "",
   "password": ,
   "database": 0,
   "sync_bans": {
     "active": true,
     "name": "",
     "check_time": 600
   }
 },

このセクションを変更して、Redisサーバーの接続の詳細が含まれるようにします。 次に、 `+ sync_bans `セクション内で、 ` name +`をホスト名に変更します。 この名前は、クロスサーバー禁止同期が正しく機能するために、同じRedisサーバーを使用してPyFilterを実行している個々のシステムごとに一意である必要があります。

ファイルを保存し、エディターを終了します。 次に、PyFilterを再起動してこれらの変更を適用します。

sudo systemctl restart PyFilter

これでPyFilterがインストールされ実行されました。

ステップ5-IPアドレスに関する位置データを収集するためのPyFilterの構成(オプション)

PyFilterは、禁止されたIPに関する位置データを取得して、攻撃の大部分の発信元に関する統計情報を提供できます。 このオプションモジュールは、この情報をPyFilterのログに追加します。

この機能を使用するには、最初に + geoip2 + Pythonモジュールが必要です。これは `+ pip +`でインストールできます。

pip3 install geoip2

このモジュールをインストールしたら、PyFilterを再起動して新しいモジュールを認識します。

sudo systemctl restart PyFilter

これで、禁止されたIPアドレスが表示されると、IPに関する追加情報が表示されます。

Output2018-03-22 14:18:18 Found IP:  from server: . .

PyFilterは、リクエストの発信元の国を正常に記録しています。

最後に、アドレスの禁止を解除する方法を見てみましょう。

ステップ6-IPアドレスの禁止を解除する

PyFilterは、純粋にiptablesルールを作成してIPアドレスを禁止する手段です。 IPを禁止すると、ファイアウォールルールを更新し、ルールのスナップショットをファイル「+ / usr / local / PyFilter / Config / blacklist.v4 」および「 / usr / local / PyFilter / Config / blacklist」に保存します。 v6 + `。

以下は、 `+ / usr / local / PyFilter / Config / blacklist.v4 +`にあるいくつかの禁止されたIPv4アドレスの例です。

/usr/local/PyFilter/Config/blacklist.v4

# Generated by iptables-save v1.6.0 on Thu Mar 22 19:53:04 2018
*filter
:INPUT ACCEPT [217:30580]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [249:30796]



COMMIT
# Completed on Thu Mar 22 19:53:04 2018

このIPアドレスの禁止を解除するには、テキストエディターで関連するブラックリストファイルを開きます。

sudo nano /usr/local/PyFilter/Config/blacklist.v4

関連するiptablesルールをファイルから削除します。 この場合、ファイルから「203.0.113.13」を削除しました。

/usr/local/PyFilter/Config/blacklist.v4

# Generated by iptables-save v1.6.0 on Thu Mar 22 19:53:04 2018
*filter
:INPUT ACCEPT [217:30580]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [249:30796]


COMMIT
# Completed on Thu Mar 22 19:53:04 2018

次に、ファイルを保存してエディターを閉じます。 `+ sudo systemctl restart PyFilter +`でPyFilterを再起動すると、PyFilterはこのファイルを使用してファイアウォールルールを更新します。

iptablesを使用したルールの管理の詳細については、https://www.digitalocean.com/community/tutorials/how-to-list-and-delete-iptables-firewall-rules [Iptables Firewallルールを一覧表示および削除する方法]を参照してください。

`+ / usr / local / PyFilter / Config / config.json +`ファイル内のホワイトリストに追加することにより、特定のIPアドレスを無視するようにPyFilterに指示することもできます。

結論

これでPyFilterがインストールされ、SSH接続を監視できました。

構成ファイルの各セクションの詳細と、MySQLやApacheなどの他のサービスの監視を構成する方法については、http://pyfilter.co.uk [PyFilter site。]をご覧ください。

Related