web-dev-qa-db-ja.com

phpMyAdminを保護する方法

Phpmyadminを見つけようとする私のウェブサイトへの奇妙なリクエストがあることに気づきました。

/phpmyadmin/
/pma/

等.

Aptを介してUbuntuにPMAをインストールしました。/phpmyadmin/とは異なるwebaddressを使用してPMAにアクセスしたいと思います。変更するにはどうすればよいですか?

ありがとう


更新

Ubuntu 9.10およびApache2の場合、対応する設定は/etc/Apache2/conf.d/phpmyadmin.confへのリンクである/etc/phpmyadmin/Apache.confファイルにあります。ファイルには

Alias /phpmyadmin /usr/share/phpmyadmin

不要なアクティビティを回避したい場合は、最初の/phpmyadminを別のものに変更する必要があります。例:

Alias /secret /usr/share/phpmyadmin
59
Andrei

最大の脅威は、攻撃者が次のような脆弱性を悪用する可能性があることです。ディレクトリトラバーサル、またはSQLインジェクションを使用してload_file()を呼び出して構成ファイル内のプレーンテキストのユーザー名/パスワードを読み取り、phpmyadminまたはtcpポート3306を使用してログインします。システム。

Phpmyadminをロックダウンする素晴らしい方法は次のとおりです。

  • リモートルートログインを許可しない!代わりにphpmyadminを設定して、 "Cookie Auth" にアクセスできるユーザーを制限できます。システム。ルート権限が必要な場合は、追加/ドロップ/作成できるが、grantまたはfile_privを持たないカスタムアカウントを作成します。
  • すべてのアカウントからfile_priv権限を削除します。 file_privは、攻撃者がファイルを読み取ったりバックドアをアップロードしたりできるため、MySQLで最も危険な特権の1つです。
  • PhpmyadminインターフェースにアクセスできるホワイトリストIPアドレス。以下に.htaccess reulsetの例を示します。
Order deny,allow
Deny from all
allow from 199.166.210.1
  • http://127.0.0.1/phpmyadminのような予測可能なファイルの場所を持たないでください。 Nessus/Nikto/Acunetix/w3afなどの脆弱性スキャナーがこれをスキャンします。

  • 攻撃者がアクセスできないように、tcpポート3306からファイアウォールで保護します。

  • HTTPSを使用します。そうしないと、データとパスワードが攻撃者に漏洩する可能性があります。証明書に30ドルを分配したくない場合は、自己署名を使用します。一度承認すると、MITMにより変更された場合でも通知されます。
81
rook

PhpMyAdminに関する私の懸念の1つは、デフォルトですべてのMySQLユーザーがdbにアクセスできることです。 DBのrootパスワードが危険にさらされると、誰かがdbを破壊する可能性があります。どのMySQLユーザーがphpMyAdminにログインできるかを制限することで、それを回避する方法を見つけたかったのです。

PhpMyAdminでAllowDeny構成を使用すると非常に便利であることがわかりました。 http://wiki.phpmyadmin.net/pma/Config#AllowDeny_.28rules.29

AllowDenyを使用すると、Apacheと同様の方法でphpMyAdminへのアクセスを構成できます。 「順序」を明示的に設定すると、「ルール」セクションで定義されたユーザーにのみアクセスが許可されます。ルールのセクションでは、phpMyAdminを使用してアクセスできるMySqlユーザーを制限します。

$cfg['Servers'][$i]['AllowDeny']['order'] = 'explicit'
$cfg['Servers'][$i]['AllowDeny']['rules'] = array('pma-user from all')

MySQLでpma-userという名前のユーザーへのアクセスが制限されたので、そのユーザーに制限付きの権限を付与できます。

grant select on db_name.some_table to 'pma-user'@'app-server'
12
Jae Cho

PhpMyAdminの新しいバージョンでは、phpMyAdminのconfig.inc.phpファイル内にユーザー名+ IPアドレスのアクセス許可を設定できます。これは、アクセスを制限する(Apacheのhttpd.confにURLとIPアドレスをハードコーディングする)ためのはるかに優れた、より堅牢な方法です。

すべてのユーザーをホワイトリストに登録する方法の完全な例(このリスト外のユーザーはアクセスを許可されません)、およびユーザールートをローカルシステムとネットワークのみに制限する方法を次に示します。

$cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow';
$cfg['Servers'][$i]['AllowDeny']['rules'] = array(
    'deny % from all', // deny everyone by default, then -

    'allow % from 127.0.0.1', // allow all local users
    'allow % from ::1',

    //'allow % from SERVER_ADDRESS', // allow all from server IP

    // allow user:root access from these locations (local network)
    'allow root from localhost',
    'allow root from 127.0.0.1',
    'allow root from 10.0.0.0/8',
    'allow root from 172.16.0.0/12',
    'allow root from 192.168.0.0/16',

    'allow root from ::1',

    // add more usernames and their IP (or IP ranges) here -    
    );

ソース: WindowsのlocalhostにphpMyAdminをインストールして保護する方法

これにより、MySQLユーザー名レベルで、ApacheのURLパーミッションまたは.htaccessファイルが提供できるよりもはるかにきめ細かいアクセス制限が与えられます。

ログインするユーザーのMySQL Host:フィールドが127.0.0.1または::1に設定されていることを確認してください。phpMyAdminとMySQLは同じシステム

6
rightstuff

別の解決策は、設定なしで構成ファイルを使用することです。初めてmysqlのルートログイン/パスワードを含めて、すべてのものをインストールしてから削除できるようにする必要がある場合があります。

$ cfg ['Servers'] [$ i] ['auth_type'] = 'cookie';

$ cfg ['Servers'] [$ i] ['Host'] = 'localhost';

$ cfg ['Servers'] [$ i] ['connect_type'] = 'tcp';

$ cfg ['Servers'] [$ i] ['compress'] = false;

$ cfg ['Servers'] [$ i] ['extension'] = 'mysql';

Apache/lighhtpdエイリアスなしでそのままにしておくと、ログイン画面が表示されます。 enter image description here

Rootでログインできますが、他のユーザーを作成し、ローカルアクセスのみにrootを許可することをお勧めします。また、文字列のパスワードは、短いが大文字であっても、特殊文字の数を使用することを忘れないでください。例えば ​​!34sy2rmbr!別名「easy 2 remember」

-編集:今日の良いパスワードは、実際には 文法的には意味がありませんが、面白いので覚えられる のような言葉のようなものです。または、キーパスを使用して強力なランダムを生成し、それらに簡単にアクセスできます

4
Piotr Kula

ほとんどの場合、WebサーバーのどこかにこのようなAliasディレクティブがあります。

Alias /phpmyadmin "c:/wamp/apps/phpmyadmin3.1.3.1/"

私のwampserver/localhost設定では、c:/wamp/alias/phpmyadmin.confにありました。

エイリアスディレクティブを変更するだけで準備完了です。

4
Mathew

Linuxサーバーを実行している場合:

  • SSHを使用すると、ユーザー/パスワードロギングを禁止し、authorized_keysファイルの公開鍵のみを受け入れることができます。
  • PuTTYを使用してサーバーに接続し、リモートターミナルを開きます
  • X11を転送し、localhost firefox/iceweaselをデスクトップに移動します(WindowsではXmingソフトウェアをインストールする必要があります)
  • SshでphpMyAdminを保護しました

このシステムは、ホームサーバーにとって非常に安全で便利です(通常、すべてのポートがデフォルトでブロックされています)。 SSHポートを転送するだけで済みます(番号22は使用しないでください)。

Microsoft Terminal Serverが好きなら、SSHトンネリングをコンピューターに設定し、それを介してWebサーバーに安全に接続することさえできます。

sshトンネリングを使用すると、リモートサーバーの3306ポートをローカルポートに転送し、ローカルのphpMyAdminまたはMySQL Workbenchを使用して接続することもできます。

このオプションはやり過ぎですが、秘密鍵のアクセスと同じくらい安全であることを理解しています。

2
JJFS

PhpMyAdminをセキュリティで保護する最良の方法は、これらすべてを組み合わせることです4:

1. Change phpMyAdmin URL
2. Restrict access to localhost only.
3. Connect through SSH and tunnel connection to a local port on your computer
4. Setup SSL to already encrypted SSH connection. (x2 security)

これらをすべて行う方法は次のとおりです:Ubuntu 16.4 + Apache 2 Setup Windows computer + PuTTY to connect and tunnel SSH connection to local port:

# Secure Web Serving of phpMyAdmin (change URL of phpMyAdmin):

    Sudo nano /etc/Apache2/conf-available/phpmyadmin.conf
            /etc/phpmyadmin/Apache.conf
        Change: phpmyadmin URL by this line:
            Alias /newphpmyadminname /usr/share/phpmyadmin
        Add: AllowOverride All
            <Directory /usr/share/phpmyadmin>
                Options FollowSymLinks
                DirectoryIndex index.php
                AllowOverride Limit
                ...
        Sudo systemctl restart Apache2
        Sudo nano /usr/share/phpmyadmin/.htaccess
            deny from all
            allow from 127.0.0.1

        alias phpmyadmin="Sudo nano /usr/share/phpmyadmin/.htaccess"
        alias myip="echo ${SSH_CONNECTION%% *}"

# Secure Web Access to phpMyAdmin:

        Make sure pma.yourdomain.com is added to Let's Encrypt SSL configuration:
            https://www.digitalocean.com/community/tutorials/how-to-secure-Apache-with-let-s-encrypt-on-ubuntu-16-04

        PuTTY => Source Port (local): <local_free_port> - Destination: 127.0.0.1:443 (OR localhost:443) - Local, Auto - Add

        C:\Windows\System32\drivers\etc
            Notepad - Run As Administrator - open: hosts
                127.0.0.1 pma.yourdomain.com

        https://pma.yourdomain.com:<local_free_port>/newphpmyadminname/ (HTTPS OK, SSL VPN OK)
        https://localhost:<local_free_port>/newphpmyadminname/ (HTTPS ERROR, SSL VPN OK)

        # Check to make sure you are on SSH Tunnel
            1. Windows - CMD:
                ping pma.yourdomain.com
                ping www.yourdomain.com

                # See PuTTY ports:
                netstat -ano |find /i "listening"

            2. Test live:
                https://pma.yourdomain.com:<local_free_port>/newphpmyadminname/

これらすべてを正常に実行できる場合、

you now have your own url path for phpmyadmin,
you denied all access to phpmyadmin except localhost,
you connected to your server with SSH,
you tunneled that connection to a port locally,
you connected to phpmyadmin as if you are on your server,
you have additional SSL conenction (HTTPS) to phpmyadmin in case something leaks or breaks.
1
Tarik

最も単純なアプローチは、Webサーバー(ほとんどの場合Apache2のインストール、構成)を編集し、phpmyadminに別の名前を付けることです。

2番目のアプローチは、phpmyadminにアクセスできるIPアドレスを制限することです(たとえば、ローカルLANまたはローカルホストのみ)。

1
lexu

次のコマンドを使用できます。

$ grep "phpmyadmin" $path_to_access.log | grep -Po "^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" | sort | uniq | xargs -I% Sudo iptables -A INPUT -s % -j DROP 

説明:

Iptablesドロップを介してパイプする前に、IPがリストされていないことを確認してください!!

これにより、最初に$ path_to_access.logでphpmyadminを含むすべての行が検索され、

次に、行の先頭からIPアドレスをgrepで出力し、

それらを並べ替えて一意にし、

次に、iptablesにドロップするルールを追加します

繰り返しますが、単にecho %は、iptablesコマンドの代わりに、IPがそこにないことを確認します。誤ってサーバーへのアクセスを禁止しないでください!

制限

Macまたはgrep -Pを持たないシステムを使用している場合は、コマンドのgrep部分を変更する必要がある場合があります。すべてのシステムがxargsで始まるかどうかはわかりませんので、それもインストールする必要があるかもしれません。とにかく多くのbashを行う場合、それは非常に便利です。

0
Technical Blood