phpMyAdmin é uma ótima ferramenta para gerenciar um banco de dados MySQL, mas colocar o acesso ao seu banco de dados atrás de uma interface da web é um grande problema de segurança. Aqui estão algumas maneiras de reduzir os riscos envolvidos na execução do phpMyAdmin.

Publicidade

Por que o phpMyAdmin é um problema de segurança?

Normalmente, você teria um banco de dados que seria executado em seu servidor e só aceitaria conexões de localhost ou talvez de outro servidor confiável. Se você tivesse um aplicativo em execução nesse servidor, ele se comunicaria diretamente. Não há como um invasor obter acesso a não ser invadir todo o servidor.

phpMyAdmin contorna isso para fornecer a você uma interface da web para gerenciar seu banco de dados. É uma ferramenta muito útil, mas é um desastre para a segurança. phpMyAdmin tem acesso irrestrito total ao seu banco de dados, pois se destina a substituir o acesso direto à linha de comando. Se um invasor obtiver acesso ao painel da web, ele terá acesso a tudo. E o phpMyAdmin geralmente é protegido apenas com uma senha simples.

Instale phpMyAdmin e Secure MySQL

phpMyAdmin é executado na pilha LAMP (Linux, Apache, MySQL, PHP). Antes mesmo de começar a instalar o phpMyAdmin, sua instância do MySQL deve estar segura. O MySQL fornece um utilitário útil para realizar algumas tarefas básicas de segurança:

Publicidade
sudo mysql_secure_installation

Isso o ajudará a alterar a senha do root, desabilitar logins remotos e remover o banco de dados de teste.

Depois disso, você pode instalar phpMyAdmin como sempre. Durante a instalação, será solicitada uma senha do usuário administrador do banco de dados (que você deve ter definido durante mysql_secure_installation), e uma nova senha para proteger o phpMyAdmin. Certifique-se de que a senha seja longa e segura, pois é o ponto final de defesa antes que os invasores possam obter acesso.

Porém, o ideal é que nenhum invasor tenha a chance de adivinhar sua senha, então você deve colocar o phpMyAdmin atrás de outra coisa para que possa protegê-lo ainda mais.

Opção 1: bloquear o Apache e usar o encaminhamento de porta SSH

Esta é a opção mais segura, mas só é realmente adequada para acesso de usuário único, especialmente para usuários únicos que têm acesso administrativo total a todo o servidor, pois requer que você se conecte por SSH.

Publicidade

O encaminhamento de porta SSH é um método de encaminhamento de portas locais para um sistema remoto. Por exemplo, você teria o Apache em execução no seu servidor, escutando na porta 80. Se você encapsulou essa porta, poderia acessá-la indo para:

Publicidade
https://localhost:80/

… Em qualquer navegador da web. De certa forma, é quase como se o Apache estivesse rodando em seu sistema. Mas a porta 80 não precisa ser aberta em seu servidor; todo o tráfego é roteado pela porta 22 padrão usada para SSH. Você precisará certificar-se de que o SSH está protegido com chaves SSH e, de preferência, não executando na porta padrão, já que esse método é tão seguro quanto a sua conexão SSH.

Para fazer isso, você precisará vincular o Apache ao host local e certificar-se de que ele não esteja aberto à Internet. Abra /etc/apache2/ports.conf, e altere as três instruções de escuta para ouvir apenas no localhost (também conhecido como 127.0.0.1):

Listen 127.0.0.1:80

<IfModule ssl_module>
  Listen 127.0.0.1:443
</IfModule>

<IfModule mod_gnutls>
 Listen 127.0.0.1:443
</IfModule>

Reinicie o Apache com:

sudo service apache2 restart

E o phpMyAdmin deve estar inacessível. Isso é esperado. Depois que o Apache estiver configurado, você pode criar um túnel para a porta 80 usando o seguinte comando:

ssh -L 80:localhost:80 [email protected]

Então, você pode acessar o phpMyAdmin de localhost:80 em qualquer navegador da web. Enquanto isso, seu servidor pode ser configurado com um firewall rígido para proibir qualquer coisa, exceto SSH.

Publicidade

Se ssh não pode vincular à porta 80, tente alterar a primeira porta para um número diferente e acessá-lo de lá no localhost. Ele ainda fará um túnel para a porta 80 na máquina remota. Esta conexão é mantida até você sair ssh. Se você quiser executá-lo em segundo plano, use o -f bandeira.

Se você deseja apenas que o phpMyAdmin ouça no localhost, você pode editar /etc/apache2/conf-enabled/phpmyadmin.conf e adicione as seguintes linhas ao Directory bloquear:

  Order deny,allow
  Deny from all
  Allow from 127.0.0.1

Um bloco de diretório.

Isso impedirá que qualquer coisa, exceto localhost, acesse a instalação do phpMyAdmin, embora você ainda precise da porta 80 aberta em seu firewall para permitir o tráfego regular.

Opção 2: bloquear o Apache e usar uma VPN

Se você precisa permitir o acesso a várias pessoas sem fornecer acesso SSH, você pode configurar o Apache para ouvir no IP privado da sua máquina e aceitar apenas conexões da mesma nuvem. Isso funciona particularmente bem com serviços como AWS VPC, onde cada servidor que você inicia é criado em uma rede virtual.

Publicidade

Para encontrar seu IP privado, você pode executar ifconfig e procure o inet endereço em seu adaptador de rede principal:

Encontre seu IP privado.

Este endereço também é visível no Console AWS EC2. Depois de copiar o endereço, abra /etc/apache2/ports.conf, e edite os três Listen diretivas para ouvir no IP privado:

Listen 172.31.87.118:8

<IfModule ssl_module>
  Listen 172.31.87.118:443
</IfModule>

<IfModule mod_gnutls>
  Listen 172.31.87.118:443
</IfModule>

Alternativamente, se você deseja apenas proteger o phpMyAdmin, você pode editar /etc/apache2/conf-enabled/phpmyadmin.conf e permitir apenas do IP privado:

Order deny,allow
Deny from all
Allow from 172.31.87.118

E reinicie o Apache.

Publicidade

Agora, para acessar o phpMyAdmin, você precisa configurar um servidor VPN como OpenVPN. Isso permitirá que você encapsule seu computador cliente para a nuvem privada virtual em que seus servidores web estão sendo executados e acesse o servidor que executa phpMyAdmin no IP privado como se você fosse outro servidor. Obviamente, você precisará definir as configurações do firewall para permitir o acesso do servidor OpenVPN à instância do phpMyAdmin.

Opção 3: proteger o Apache com HTTPS e autenticação básica

Se você realmente precisa usar DNS público e ter seu servidor acessível, pode usar a autenticação Básica com Apache. Esta é simplesmente outra senha na frente do phpMyAdmin que evita que estranhos façam qualquer solicitação ao aplicativo phpMyAdmin. Você pode usar isso junto com as outras opções nesta lista, pois é apenas uma camada extra de defesa.

Crie um novo arquivo de senha com htpasswd, que já deve estar instalado junto com o Apache (se não, está em apache2-utils):

sudo htpasswd /etc/apache2/.htpasswd phpadmin

Isso permite que você defina uma nova senha para o usuário phpadmin e armazena em /etc/apache2/.htpasswd.

Abra /etc/apache2/conf-enabled/phpmyadmin.confe configure-o para usar autenticação básica com o arquivo de senha recém-criado:

Publicidade
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

Reinicie o Apache com:

sudo service apache2 restart

E quando você tentar acessar o phpMyAdmin em seu navegador, será solicitado um nome de usuário e uma senha. Digitar phpadmin e a senha que você criou, e você deve ter permissão de acesso. Caso contrário, tudo o que você verá é um 401 Unauthorized resposta.