web-dev-qa-db-ja.com

phpmyadminを保護する方法

OK、私はSSL証明書を持つvpsにいくつかのサイトを持っています。私はmodのセキュリティ設定とtripwireを持っています。私の質問は、phpmyadminセキュリティに関するものです。 IPが123.123.123.123の場合、123.123.123.123/mypmyadmin-IHaveChangedThisURLを使用してphpmyadminにアクセスできます。

PhpmyadminのURLを変更しても、URLが見つかった場合はphpmyadminにアクセスできます。

ルートディレクトリに空のhtmlファイルを追加したため、vpsホスト名またはvps IPを使用してディレクトリインデックスが指定されていません。

IPの使用を保護し、phpmyadminなどにアクセスしようとするためにできることは他にありますか?

どんなガイダンスも感謝します。ありがとう。

4
Hawk007

いくつかのことができます。私のアイデアと、Apache2でそれらを実装する方法を説明します。


1. HTTPS接続を使用して、データをスニッフィングから保護します

  • SSLモジュールが有効になっていない場合は、まず有効にします:Sudo a2enmod ssl

  • ポート443(HTTPS)を firewall に挿入します。ここでカスタムポートを使用する必要があります。

  • このマニュアル に従って、Let's Encryptから無料の証明書を有効にします。

  • this answer を確認し、弱い暗号を無効にします。

  • 次に、 すべてのユーザーにHTTPS の使用を強制できます。


2. PhpMyAdminのURIを変更します

URIを変更するには、デフォルト構成内で、/etc/phpmyadmin/Apache.confを編集し、このディレクティブの最初の部分(/phpmyadmin)を変更する必要があります。

Alias /phpmyadmin /usr/share/phpmyadmin

Apacheを再起動すると、新しいURIを介してPhpMyAdminにアクセスできます。


3.別のポートでPhpMyAdminを実行します

以下はステップバイステップのマニュアルです: PhpMyAdminを異なるポートで実行する方法 。ファイアウォールへのこのポートを開くことを忘れないでください。


4. SSHトンネルを介してローカルでのみPhpMyAdminにアクセスします

別のポートでPhpMyAdminを実行します。それがポート99であると仮定しましょう。 このポートを閉じるファイアウォールに。次に、次のようなコマンドでSSH接続を確立します。

ssh -fTN -R 99:localhost:99 <user>@<domain>or<ip>
  • このコマンドは、リモートの-Rポート99localhost99)のローカルポート127.0.0.1に転送されるssh tunnel を作成します。
  • オプション-fTNは、接続をバッ​​クグラウンドにプッシュします。

その後、PhpMyAdminは、URL http://localhost:99/でローカルマシンのWebブラウザを介してアクセスできるはずです。他のアイデアはここで見つけることができます:


5.パスワード認証によるPhpMyAdmin URIパスの保護

詳細については、Apacheのマニュアル Authentication and Authorization を参照してください。パッケージ Apache2-utils をインストールする必要があります。要するに、手順は次のとおりです。

  • パスワードファイルが保存される/var/wwwの外にフォルダーを作成します。次に、パスワードファイルを生成します。この新しいフォルダーの名前が/var/www-authであると仮定しましょう:

    $ Sudo mkdir /var/www-auth
    $ cd /var/www-auth
    $ Sudo htpasswd -c .htpasswd.phpmyadmin <user>
    New Password: *********
    Re-Type New Password: *********
    Adding Password For User <user>
    
    • .htpasswd.phpmyadminは、パスワードが保存されるファイルの名前です。
    • userは、使用されるログイン名です。
    • *********はパスワードです:)
    • -cは、新しいファイルを作成することを意味します。このオプションを省略すると、htpasswdコマンドは新しいlogin nameを既存の.htpasswd.fileに追加しようとします。
  • 次のように/etc/phpmyadmin/Apache.confを編集してPhpMyAdmin認証タイプを変更します(または.htaccessファイルを作成します):

        <Directory /usr/share/phpmyadmin>
        .....
            <IfModule mod_authz_core.c>
                <IfModule mod_authn_file.c>
                    AuthType Basic
                    AuthName "The name of the authentication form - type some user and password hints"
                    AuthUserFile /var/www-auth/.htpasswd.phpmyadmin
                </IfModule>
                Require valid-user
            </IfModule>
        .....
        </Directory>
    
  • モジュールを有効にし、Apache2を再起動して新しい構成を適用します。

        Sudo a2enmod authz_core authz_user authn_file
        Sudo systemctl restart Apache2.service
    
  • PhpMyAdminのURIにアクセスするには、ログイン名userとそのpasswordを指定する必要があります。


6. 2要素認証(2FA)を介してPhpMyAdmin URIパスを保護します。

  • 手順 1 および 3 from this manual .google_authenticatorディレクトリにある$HOMEファイルを生成します。ステップ 4 では、認証コードを生成する方法を説明しています。

  • /var/www-authの下に新しいディレクトリを作成します。この新しいフォルダーの名前がgoogle_authenticatorであると仮定しましょう:

    Sudo mkdir -p /var/www-auth/google_authenticator
    
  • ファイル$HOME/.google_authenticatorをそのディレクトリにコピーし、そのアクセス許可を変更します(www-dataで読み取り可能でなければなりません):

    Sudo cp $HOME/.google_authenticator /var/www-auth/google_authenticator/user
    Sudo chown www-data:www-data /var/www-auth/google_authenticator/user
    

    ファイル名がログイン名を決定することに注意してください!ファイル名は、安全なWebサイトにログインするときにユーザー名として使用されます。

  • ディレクティブ" PASSWORD=qwertyを追加して、新しいファイルを変更します。ここで、qwertyは新しいログインパスワードです。

     E3CY3TNSNBXXXXXX 
     "RESETTING_TIME_SKEW ... 
    " RATE_LIMIT 3 30 ... 
     "WINDOW_SIZE 17 
    " DISALLOW_REUSE 48885555 ... 
     "TOTP_AUTH 
    "PASSWORD = qwerty
     4567 ... 
    
  • Apache2のmod_authn_googleをインストールします。残念ながら、このモジュールはUbuntuのリポジトリ内では使用できませんが、 this repository から取得できます。手順は、(1)Downloadsに移動、(2)パッケージをダウンロード dba-apa24-mod_authn_google-r22... .rpm 、(3)mod_authn_google.soを抽出、(4)ファイルを/usr/lib/Apache2/modules/に配置、( 5)適切な許可を付与します。(6)モジュールロードファイルを作成します。

    cd $HOME/Downloads
    wget http://download.opensuse.org/repositories/home:/csbuild:/DBA/RedHat_RHEL-7/x86_64/dba-apa24-mod_authn_google-r22-1.1.x86_64.rpm
    
    rpm2cpio dba-apa24-mod_authn_google-r22-1.1.x86_64.rpm | cpio -iv --to-stdout ./DBA/Apache24/WWW/2.4.x/modules/mod_authn_google-r22.so > mod_authn_google.so
    
    Sudo mv mod_authn_google.so /usr/lib/Apache2/modules/
    Sudo chown root:root /usr/lib/Apache2/modules/mod_authn_google.so
    Sudo chmod g-w /usr/lib/Apache2/modules/mod_authn_google.so
    
    echo "LoadModule authn_google_module /usr/lib/Apache2/modules/mod_authn_google.so" | Sudo tee /etc/Apache2/mods-available/authn_google.load
    
    Sudo a2enmod authn_google
    
  • 次のように/etc/phpmyadmin/Apache.confを編集してPhpMyAdmin認証タイプを変更します(または.htaccessファイルを作成します):

        <Directory /usr/share/phpmyadmin>
        .....
            <IfModule mod_authz_core.c>
                <IfModule mod_authn_google.c>
                    AuthType Basic
                    AuthName "The name of the authentication form - type some user and password hints"
                    AuthBasicProvider "google_authenticator"
                    GoogleAuthUserPath /var/www-auth/google_authenticator
                    GoogleAuthCookieLife 3600
                    GoogleAuthEntryWindow 2
                </IfModule>
                Require valid-user
            </IfModule>
        .....
        </Directory>
    
  • モジュールを有効にし、Apache2を再起動して新しい構成を適用します。

        Sudo a2enmod authz_core authz_user authn_google
        Sudo systemctl restart Apache2.service
    
  • PhpMyAdminのURIにアクセスするには、ログイン名user、そのpassword、および6桁のtoken codeを指定する必要があります。

    enter image description here


7. ApacheにModSecurityを使用する

ModSecurityを使用すると、PhpMyAdminのURIにより柔軟な制限を追加できます。 this answer のセクション"ModSecurity Rules> SAS> Iptables"、ModSecurityのカスタムルールを作成する方法を簡単に説明しました。

3
pa4080