如何保护 phpmyadmin

如何保护 phpmyadmin

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

任何指导都值得赞赏。谢谢。

答案1

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


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

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

  • 打开 443 端口 (HTTPS)防火墙。您应该在这里使用您的自定义端口。

  • 跟随本手册并启用来自 Let's Encrypt 的免费证书。

  • 查看这个答案并禁用弱密码。

  • 然后你可以强制所有用户使用 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。我们假设它是 port 99关闭此端口进入防火墙。然后通过类似以下命令建立 SSH 连接:

ssh -fTN -R 99:localhost:99 <user>@<domain>or<ip>
  • 此命令将创建 ssh隧道,其中远程-R端口99转发到( )99上的本地端口。localhost127.0.0.1
  • 这些选项-fTN将会把连接推送到后台。

然后,您便可以通过本地计算机上的 Web 浏览器通过 URL 访问 PhpMyAdmin http://localhost:99/。更多想法可在此处找到:


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

更多详细信息可以参阅 Apache 手册:身份验证和授权. 包装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
  • 修改PhpMyAdmin的身份验证类型,通过/etc/phpmyadmin/apache.conf这种方式编辑(或创建.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. 通过双因素身份验证(2FA)保护 PhpMyAdmin URI 路径:

  • 按照步骤操作13本手册生成.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
    

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

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

    E3CY3TNSNBXXXXXX
    “正在重置时间偏差 ...
    “RATE_LIMIT 3 30...”
    “窗口大小 17
    “禁止重复使用 48885555...”
    “ TOTP_AUTH”
    “密码=qwerty”
    4567……
    
  • 为 Apache2安装mod_authn_google。不幸的是,这个模块在 Ubuntu 的存储库中不可用,但我们可以从中获取它这个存储库。步骤如下:(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
    
  • 修改PhpMyAdmin的身份验证类型,通过/etc/phpmyadmin/apache.conf这种方式编辑(或创建.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及其password6 位数字token code

    在此处输入图片描述


7. 对 Apache 使用 ModSecurity

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

相关内容