ブルートフォース攻撃を防ぐためのシェルスクリプト設定

ブルートフォース攻撃を防ぐためのシェルスクリプト設定

シェルスクリプトはアクセス制御を設定し、複数回のログイン失敗後にIPをブロックしてSSHのブルートフォースクラッキングを防止します。

ホストがサーバーに対して SSH リモート管理を実行していることが判明し、10 分以内に間違ったパスワードが 3 回入力されると、firewalld を使用して応答し、この IP の再接続を禁止し、6 時間後に再び接続が許可されます。

1. システム: Centos7.1 64 ビット

2. 方法: /var/log/secureを読み込んでキーワードFailedを検​​索する

1月4日 16:29:01 centos7 sshd[1718]: 192.168.120.1 ポート 2171 ssh2 からの root のパスワードに失敗しました
1月4日 16:29:02 centos7 sshd[1718]: pam_succeed_if(sshd:auth): 要件「uid >= 1000」はユーザー「root」によって満たされていません
1月4日 16:29:04 centos7 sshd[1718]: 192.168.120.1 ポート 2171 ssh2 からの root のパスワードに失敗しました
1月4日 16:29:06 centos7 sshd[1718]: エラー: 192.168.120.1 ポート 2171:0 から切断を受信しました: [preauth]
1月4日 16:45:53 centos7 sshd[1758]: 192.168.120.134 ポート 40026 ssh2 からの root のパスワードに失敗しました
3. シェルコード、test.shを作成する
#!bin/bash
#違法なIPアドレスを傍受する
月=$(LANG=C 日付 +"%b")
day=$(LANG=C 日付 +"%e")
now=$(LANG=C 日付 +"%T")
ten=$(LANG=C date -d "10分前" +"%T")

cat /var/log/secure |awk '$1=="'$month'" && $2=='"$day"' && $3>="'$ten'" && $3<="'$now'" { print}' |grep '失敗'|awk -F'from' '{ print $2}' |awk '{ print $1}'|sort |uniq -c > baduser.txt

#計算回数
times=`awk '{ print $1 }' baduser.txt`

#禁止された IP アドレス
シーケンス=1
i を $times で
する
   ip=`sed -n ''$seq'p' baduser.txt |awk '{ print $2}'`
   [ $i -ge 3 ]の場合
   それから
   ファイアウォール-cmd --add-rich-rule='ルール ファミリ=ipv4 送信元アドレス='$ip' ポート ポート=22 プロトコル=tcp 拒否' --timeout=6h
   フィ
seq=`式 $seq + 1`
終わり
4. test.sh スクリプトを cron スケジュール タスクに追加し、60 分ごとに実行します。
# crontab -e
*/60 * * * * sh /root/test.sh

ここに画像の説明を挿入

5. テスト

1. ターミナル ウィンドウを開き、ssh でサーバーに接続し、間違ったパスワードでサーバーに数回接続します。
すぐに、サーバー上のブラックリスト baduser.txt ファイルに次の記録が記録されました。

ここに画像の説明を挿入

IP がサーバーの baduser.txt ファイルに追加され、サーバーに接続できず、拒否されます。

ここに画像の説明を挿入

ssh のブルートフォースクラッキングを防ぐためのシェルスクリプト設定に関するこの記事はこれで終わりです。シェルスクリプトによるブルートフォースクラッキング対策に関する関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • SSH ポート転送とは何ですか?何の役に立つの?
  • sshとは何ですか?使い方は?どのような誤解があるのでしょうか?
  • Linux リモート管理と sshd サービス検証の知識ポイントの詳細な説明
  • Centos8環境でSSHポート番号を変更する方法
  • SSH リモート管理サービス

<<:  Quill エディタでカスタム HTML レコードを挿入する詳細な例

>>:  CSS3で実装された6つの境界遷移効果

推薦する

MySQL ベースのシーケンス実装方法

チームは新しいフレームを交換しました。すべての新しいビジネスでは、新しいフレームワークと新しいデータ...

MySQL インデックスの原理と最適化の詳細な説明

序文この記事は Meituan の大物によって書かれました。とても素晴らしいので、皆さんと共有したい...

Mysql の使用法の概要

導入EXISTS は、サブクエリが少なくとも 1 行のデータを返すかどうかを確認するために使用されま...

Webフロントエンドの一般的な操作(JS/HTML/CSSなどの知識を含む)

ul liの前のアイコン1をキャンセルしますクリア値1値を1に設定ラベル中央値1をクリアラベルの中央...

JavaScript タイピングゲーム

この記事では、タイピングゲームを実装するためのJavaScriptの具体的なコードを参考までに紹介し...

MySQLのexplain型の詳細な説明

導入:多くの場合、さまざまな選択ステートメントを使用して必要なデータを照会した後、多くの人は作業が正...

MySQL で中国語を入力するときに発生するエラー 1366 の解決方法

MySQL で中国語を入力すると、次のエラーが発生します。エラー 1366: 1366: 行 1 の...

MySQL 8.0 の非表示列に対する基本操作

目次01 非表示の列を作成する02 非表示の列に対する基本操作03 非表示の列メタデータ04 主キー...

Vue2は応答性を提供するためにprovide injectを実装しています

1. vue2 での従来の書き方 // 親コンポーネントは 'foo' を提供します...

HTML でナンバープレート番号と州の略語を入力するためのサンプルコード

原理としては、まずボタン付きの div を記述し、次に画面のサイズに応じて自動的に適応してキーボード...

DockerでRedashの中国語版をデプロイしてインストールする方法の詳細な説明

1. インストール手順 Linux 環境でのローカル インストールと比較すると、Docker のイン...

Nodeはバックエンドの実装手順を素早く構築します

1. まず、node、express、express-generator をインストールします (4...

Centos7にnginxをインストールする方法

必要な環境をインストールする1. gccのインストールnginx をインストールするには、公式サイト...

MySQL 8.0.13 のダウンロードとインストールのチュートリアル(画像とテキスト付き)

MySQL は最もよく使用されるデータベースです。詳しく知るには、コンピュータにインストールする必...

Node.jsはSTMPプロトコルとEWSプロトコルに基づいてメールを送信します

目次1 STMP プロトコルに基づいてメールを送信する Node.js メソッド2 MS Excha...