如何保护 phpmyadmin

Haw*_*007 5 server security apache2 phpmyadmin 16.04

好的,所以我在带有 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 等?

任何指导表示赞赏。谢谢。

pa4*_*080 5

可以做几件事。我将解释我的想法以及如何在 Apache2 中实现它们的方式。


1. 使用 HTTPS 连接来保护您的数据不被嗅探

  • 如果未启用,请先启用 SSL 模块:sudo a2enmod ssl.

  • ?pen 端口 443 (HTTPS) 进入防火墙。您应该在此处使用您的自定义端口。

  • 按照本手册启用 Let's Encrypt 的免费证书。

  • 检查此答案并禁用弱密码。

  • 然后您可以强制所有用户使用 HTTPS


2.更改PhpMyAdmin的URI

要更改 URI,在默认配置中,您应该编辑/etc/phpmyadmin/apache.conf和更改/phpmyadmin此指令的第一部分 ( ):

Alias /phpmyadmin /usr/share/phpmyadmin
Run Code Online (Sandbox Code Playgroud)

重新启动 Apache,您将能够通过新的 URI 访问 PhpMyAdmin。


3. 在不同的端口上运行 PhpMyAdmin

这是一个分步手册:How to run PhpMyAdmin on different port。不要忘记在防火墙中打开这个端口。


4. 只在本地通过SSH隧道访问PhpMyAdmin

在不同的端口上运行 PhpMyAdmin。我们假设它是 port 99关闭此端口进入防火墙。然后通过类似如下的命令建立 SSH 连接:

Alias /phpmyadmin /usr/share/phpmyadmin
Run Code Online (Sandbox Code Playgroud)
  • 此命令将创建 ssh隧道,其中远程-R端口99被转发到( )99上的本地端口。localhost127.0.0.1
  • 这些选项-fTN会将连接推送到后台。

然后应该可以通过 URL 上本地计算机的 Web 浏览器访问 PhpMyAdmin http://localhost:99/。更多想法可以在这里找到:


5. 通过密码认证保护 PhpMyAdmin URI 路径

更多细节可以在这个 Apache 的手册中找到:Authentication and Authorizationapache2-utils必须安装该软件包。简而言之,步骤是:

  • 在 之外创建文件夹/var/www,密码文件将保存在该文件夹中。然后生成密码文件。让我们假设这个新文件夹的名称是/var/www-auth

    ssh -fTN -R 99:localhost:99 <user>@<domain>or<ip>
    
    Run Code Online (Sandbox Code Playgroud)
    • .htpasswd.phpmyadmin 是将存储密码的文件的名称。
    • user 是将使用的登录名。
    • ********* 是密码:)
    • -c表示创建新文件。如果省略此选项,htpasswd命令将尝试将新添加login name到现有.htpasswd.file.
  • 修改 PhpMyAdmin 认证类型,通过/etc/phpmyadmin/apache.conf这种方式编辑(或创建.htaccess文件):

    $ 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>
    
    Run Code Online (Sandbox Code Playgroud)
  • 启用模块并重新启动 Apache2 以应用新配置:

    <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>
    
    Run Code Online (Sandbox Code Playgroud)
  • 现在要访问 PhpMyAdmin 的 URI,您必须提供登录名user及其password.


6. 通过双重身份验证 (2FA) 保护 PhpMyAdmin URI 路径:

  • 按照步骤13,从本手册中生成.google_authenticator文件,位于您的$HOME目录。步骤4描述了如何生成验证码。

  • 下新建一个目录/var/www-auth。让我们假设这个新文件夹的名称是google_authenticator

    sudo a2enmod authz_core authz_user authn_file
    sudo systemctl restart apache2.service
    
    Run Code Online (Sandbox Code Playgroud)
  • 将文件复制$HOME/.google_authenticator到该目录并更改其权限(对于 必须是可读的www-data):

    sudo mkdir -p /var/www-auth/google_authenticator
    
    Run Code Online (Sandbox Code Playgroud)

    请注意文件名决定登录名!在登录到您的安全网站时,文件名将用作用户名。

  • 通过添加指令修改新文件" PASSWORD=qwerty,其中qwerty是新的登录密码。

    E3CY3TNSNBXXXXXX
    " RESETTING_TIME_SKEW ...
    " RATE_LIMIT 3 30 ...
    " WINDOW_SIZE 17
    " DISALLOW_REUSE 48885555 ...
    " TOTP_AUTH
    " 密码=qwerty
    4567...
    
  • 安装mod_authn_googleApache2。不幸的是,这个模块在 Ubuntu 的存储库中不可用,但我们可以从这个存储库中获取它。步骤是:(1)转到您的Downloads,(2)下载包dba-apa24-mod_authn_google-r22... .rpm,(3)提取mod_authn_google.so,(4)将文件放入/usr/lib/apache2/modules/,(5)授予适当的权限,(6)创建模块加载文件:

    sudo cp $HOME/.google_authenticator /var/www-auth/google_authenticator/user
    sudo chown www-data:www-data /var/www-auth/google_authenticator/user
    
    Run Code Online (Sandbox Code Playgroud)
  • 修改 PhpMyAdmin 认证类型,通过/etc/phpmyadmin/apache.conf这种方式编辑(或创建.htaccess文件):

    E3CY3TNSNBXXXXXX
    " RESETTING_TIME_SKEW ...
    " RATE_LIMIT 3 30 ...
    " WINDOW_SIZE 17
    " DISALLOW_REUSE 48885555 ...
    " TOTP_AUTH
    " PASSWORD=qwerty
    4567...
    
  • 启用模块并重新启动 Apache2 以应用新配置:

    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
    
    Run Code Online (Sandbox Code Playgroud)
  • 现在要访问 PhpMyAdmin 的 URI,您必须提供登录名user、登录名password和 6 位数字token code

    在此处输入图片说明


7. 为 Apache 使用 ModSecurity

使用 ModSecurity,您可以向 PhpMyAdmin 的 URI 添加更灵活的限制。在这个答案中,在“ModSecurity Rules > SAS > Iptables”部分下,我简短地描述了我们如何为 ModSecurity 创建自定义规则。

  • 如果额外的偏执(在这种情况下会非常好),我实际上会建议一个专门为 phpmyadmin 仅向本地主机提供服务的虚拟主机,然后使用 ssh 隧道和浏览器代理 - 所以 phpmyadmin 只有在 ssh 访问也实现时才可用...... (2认同)

归档时间:

查看次数:

4840 次

最近记录:

6 年,2 月 前